簡體   English   中英

握手異常和連接拒絕異常之間的區別

[英]Difference between Handshake exception and Connection Refused exception

我使用線程池超過50的Jetty服務器,每天處理大約200個加密請求。 當請求數量突然激增時,某些請求將失敗,或者

    Caused by: javax.net.ssl.SSLException: Handshake did not complete within 10000ms
 at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:1.8.0_131]
        at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) ~[?:1.8.0_131]

要么

 Caused by: java.net.ConnectException: Connection refused: <hostname>/IP
at org.jboss.netty.handler.ssl.SslHandler$1.run(SslHandler.java:372) ~[netty-3.10.6.Final.jar:?]
        at org.jboss.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:556) ~[netty-3.10.6.Final.jar:?]

有人可以幫助我理解這兩個錯誤之間的區別,以及如何糾正這些錯誤?

“拒絕連接”表示客戶端無法創建與服務器的TCP連接,而“ SSLException:握手未在...內完成”表示可以創建TCP連接,但服務器未在給定的時間內完成SSL握手時間(10秒)。 TCP握手是由OS內核完成的,但是最多只能處理服務器應用程序尚未處理的特定數量的未完成連接(偵聽隊列的大小),而TLS握手是在應用程序內部完成的。

鑒於僅當請求數量激增時才出現問題,這意味着您的系統無法處理此激增,即過載。 這可能是因為您的系統速度不夠快(CPU),內存太少(例如,超出了峰值限制並且需要交換到磁盤)或每個請求完成的數量太高。 如果每個線程都在做大量工作,則可能是您在峰值中獲得的請求數量超出了可用線程的數量。

要解決此問題,您需要找出真正的原因是什么,並相應地調整系統,即使用更快的CPU,更多的內存,為每個請求執行的工作更少或使用更多的線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM