Разница между исключением рукопожатия и исключением соединения отказано - PullRequest
0 голосов
/ 08 мая 2018

Я использую сервер 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:?]

Может ли кто-нибудь помочь мне понять разницу между обеими этими ошибками и как ее можно исправить?

1 Ответ

0 голосов
/ 08 мая 2018

«Отказано в соединении» означает, что клиент не смог создать TCP-соединение с сервером, в то время как «SSLException: Рукопожатие не завершилось в течение ...» * означает, что TCP-соединение мог быть создан, но сервер не завершил рукопожатие SSL в течение заданного времени (10 с). TCP-квитирование выполняется ядром ОС, но только до определенного числа ожидающих соединений, которые еще не обрабатываются серверным приложением (размер очереди прослушивания), в то время как TLS-квитирование выполняется внутри приложения.

Учитывая, что проблема возникает только тогда, когда количество запросов увеличивается, это означает, что ваша система не может обработать этот пик, то есть он перегружен. Это может быть связано с тем, что ваша система недостаточно быстра (ЦП), имеет слишком мало памяти (т. Е. Превышен лимит на выбросы и должен быть перенесен на диск) или объем, полученный для каждого запроса, слишком велик. В случае, если каждый из потоков выполняет большую работу, может также оказаться, что количество запросов, которые вы получаете в пике, слишком сильно превышает количество доступных потоков.

Чтобы исправить это, вам необходимо выяснить, какая из этих проблем является реальной причиной, и соответственно настроить вашу систему, то есть использовать более быстрый ЦП, больше памяти, выполнять меньше работы для каждого запроса или использовать больше потоков.

...