Сокеты в CLOSE_WAIT от клиента Джерси - PullRequest
8 голосов
/ 11 января 2011

Я использую Jersey 1.4, ApacheHttpClient и класс Apache MultiThreadedHttpConnectionManager для управления соединениями. Для HttpConnectionManager я установил staleCheckingEnabled в true, maxConnectionsPerHost в 1000 и maxTotalConnections в 1000. Все остальное по умолчанию. Мы работаем в Tomcat и подключаемся к нескольким внешним хостам с помощью клиента Jersey.

Я заметил, что через некоторое время я начну видеть сокеты в состоянии CLOSE_WAIT, связанные с процессом Tomcat. Некоторый мониторинг с помощью tcpdump показывает, что внешние хосты через некоторое время закрывают соединение, но с нашей стороны оно не закрывается. Обычно в очереди чтения сокетов есть некоторые данные, часто 24 байта. Соединения используют https, и данные, кажется, зашифрованы, поэтому я не уверен, что это такое.

Я проверил, чтобы убедиться, что созданные объекты ClientRequest закрыты. Сокеты в CLOSE_WAIT, похоже, перерабатываются, и у нас не осталось никаких ресурсов, по крайней мере, в настоящее время. Я не уверен, что происходит на внешних серверах.

У меня вопрос: нормально ли это, и стоит ли мне беспокоиться?

Спасибо

John

1 Ответ

1 голос
/ 11 февраля 2011

Вероятно, это устройство, такое как брандмауэр или удаленный сервер, тайм-аут сеанса TCP. Вы можете анализировать захват пакетов HTTPS, используя Wireshark, как описано на их странице SSL:

http://wiki.wireshark.org/SSL

Флаг staleCheckingEnabled выполняет проверку только при фактическом использовании соединения, поэтому вы не используете сетевые ресурсы (сеансы TCP), когда они не нужны.

...