【问题标题】:Difference between Handshake exception and Connection Refused exceptionHandshake 异常和 Connection Refused 异常的区别
【发布时间】:2018-05-08 16:32:23
【问题描述】:

我使用的 Jetty 服务器拥有超过 50 个线程池,每天处理大约 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:?]

有人可以帮助我理解这两个错误之间的区别以及如何纠正它吗?

【问题讨论】:

    标签: java ssl jetty client-server


    【解决方案1】:

    “连接被拒绝” 表示客户端无法创建到服务器的 TCP 连接,而 “SSLException: Handshake did not complete within ...” 表示可以创建 TCP 连接,但服务器未在给定时间(10 秒)内完成 SSL 握手。 TCP 握手由操作系统内核完成,但在 TLS 握手在应用程序内部完成时,最多只有特定数量的未由服务器应用程序处理的未处理连接(侦听队列的大小)。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-21
      • 2011-04-16
      • 2017-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 2015-05-25
      相关资源
      最近更新 更多