java - 握手异常和拒绝连接异常的区别

标签 java ssl jetty client-server

我使用线程池超过 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: Handshake did not complete within ...” 表示可以创建 TCP 连接,但服务器未在给定时间(10 秒)内完成 SSL 握手。 TCP 握手由操作系统内核完成,但仅限于服务器应用程序尚未处理的特定数量的未完成连接(监听队列的大小),而 TLS 握手在应用程序内部完成。

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

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

关于java - 握手异常和拒绝连接异常的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50238363/

相关文章:

java - 在添加数字时对 Java 数组进行排序

java - JUnit : when testing method with annotation, 测试忽略注释

delphi - SSL 库未在 Delphi COM+ 应用程序中加载

ssl - OpenSSL RSA key 大小

jakarta-ee - Jetty hello world 中的 ClassNotFoundException : javax. servlet.AsyncContext

gwt - jetty 和GWT(Google Web工具包)

java - 避免在循环中实例化对象 - SONAR 合规性

Java 关联数组作为方法的选项

c# - 无法在 C# 中使用 twitterizer 更新推文(错误 : ssl required)

java - Dropwizard session 集群