Проблемы рукопожатия SSL - PullRequest
5 голосов
/ 23 марта 2011

Наше серверное приложение страдает от крайней медлительности у некоторых клиентов. Медлительность устраняется перезапуском сервера, однако возвращается через пару недель.

Процессор Java всегда составляет около 100% (из 200%), все остальные параметры в порядке. Исследования показали, что большая часть ЦП используется потоком «HandshakeCompletedNotify-Thread». Из tcp dump мы видим, что рукопожатие SSL занимает 2-8 секунд, что очень долго, иногда выбрасывается таймаут.

Наш поставщик SSL - BSAFE. Сервер работает на Linux (CentOS), куча 640 Мб, 2 ядра. Hibernate, используются пружины, Oracle local db

Какими могут быть причины такого поведения? Что можно сделать, чтобы их выяснить?

P.S. Мы не можем переключить трафик на HTTP у наших клиентов.

Обновление: система полностью освобождается, когда исходящие соединения процесса Java блокируются IP-таблицами. Какой ресурс освобождается в такой ситуации? Мы видим, что SSL Handshake часто застревает на этапе «изменения спецификации шифра». Клиент (мой процесс Java) пытается повторно использовать сеанс SSL, но сервер полностью лишен состояния, каждый раз он генерирует новый сеанс.

Ответы [ 4 ]

3 голосов
/ 26 июля 2012

Это известная ошибка, которая появилась, когда Sun выпустила Java-плагин следующего поколения в 6u10.Oracle наконец исправил это в Java 7u2, но они не перенесли его в Java 6, по крайней мере, с 6u33.

Подробности об ошибке, # 7060523, можно найти здесь .

1 голос
/ 23 марта 2011

Возможно, вы захотите взглянуть на эту проблему , сообщенную для JBoss (не уверен, что это то, что вы используете). Эти проблемы указывают на то, что HandshakeCompletedNotify-Thread может бросить ConcurrentModificationException, что является одним из возможных результатов состояния гонки. Другие результаты включают код, который застревает в бесконечном цикле и привязывает процессор, что звучит как ваш симптом. Я бы посоветовал обновить JBoss, если вы используете его, или библиотеку, связанную с возникновением проблемы. Это может решить вашу проблему.

0 голосов
/ 24 марта 2011

Анализировали ли вы свои DNS-запросы.Рукопожатие SSL может занять больше времени, когда поиск DNS медленный, для эффективности требуется поиск, а также обратный поиск.

0 голосов
/ 24 марта 2011

Можно попробовать переключиться на реализацию JSSE по умолчанию JRE, чтобы узнать, является ли ошибка BSAFE проблемой.

Включение кода отладки JSSE также может быть полезным (свойство javax.net.debug).

Эти ссылки очень полезны при отладке JSSE

http://download.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#Debug

http://download.oracle.com/javase/1.5.0/docs/guide/security/jsse/ReadDebug.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...