握手异常和连接被拒绝异常之间的区别



我使用线程池超过 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 连接,但服务器未在给定时间(10 秒(内完成 SSL 握手。TCP 握手由操作系统内核完成,但最多只能处理特定数量的未完成连接,这些连接尚未由服务器应用程序处理(侦听队列的大小(,而 TLS 握手是在应用程序内部完成的。

鉴于问题仅在请求数量出现峰值时才会出现,这意味着您的系统无法处理此峰值,即它已过载。这可能是因为您的系统速度不够快(CPU(,内存太少(即超出峰值限制并需要交换到磁盘(或为每个请求完成的数量太高。如果每个线程都在做大量工作,也可能是您在峰值中获得的请求量过多地超过了可用线程的数量。

要修复它,您需要找出这些问题的真正原因并相应地调整您的系统,即使用更快的CPU,更多的内存,为每个请求做更少的工作或使用更多的线程。

最新更新