Как убить tcp-соединение с состоянием CLOSE_WAIT

Я обнаружил проблему в своем веб-приложении, спящие соединения не закрываются должным образом. но учитывая сложность веб-приложения, это занимает не менее 15 - 30 дней.

Тем временем я хотел вручную закрыть соединение.

Таким образом, я могу закрыть это соединение без перезапуска кота? Есть команда, которую я могу использовать для уничтожения этого пула соединений?

Я нашел ошибку в конфигурации спящего режима, чтобы решить

#netstat -anp |grep 3306 |grep CLOSE_WAIT
tcp        1      0 ::ffff:172.18.11.4:50750    ::ffff:172.18.11.8:3306     CLOSE_WAIT  4203/java           
tcp        1      0 ::ffff:172.18.11.4:36192    ::ffff:172.18.11.8:3306     CLOSE_WAIT  4203/java           
tcp        1      0 ::ffff:172.18.11.4:36215    ::ffff:172.18.11.8:3306     CLOSE_WAIT  4203/java           
tcp        1      0 ::ffff:172.18.11.4:36211    ::ffff:172.18.11.8:3306     CLOSE_WAIT  4203/java           
tcp        1      0 ::ffff:172.18.11.4:57820    ::ffff:172.18.11.8:3306     CLOSE_WAIT  4203/java           
tcp        1      0 ::ffff:172.18.11.4:36213    ::ffff:172.18.11.8:3306     CLOSE_WAIT  4203/java           
tcp        1      0 ::ffff:172.18.11.4:36159    ::ffff:172.18.11.8:3306     CLOSE_WAIT  4203/java 

и т.д....

CentOS 6.0 под управлением Tomcat 5.5 и Mysql 5.5.


person Gamin Goal    schedule 30.11.2011    source источник
comment
но учитывая сложность веб-приложения, это занимает не менее 15-30 дней - нет, это не связано со сложностью приложения (кода).   -  person symcbean    schedule 30.11.2011
comment
Точно, это ошибка, и вам нужно ее исправить.   -  person user207421    schedule 29.06.2013


Ответы (2)


Всегда звоните socket.close(). См. также как закрыть JDBC ресурсы должным образом каждый раз.

Если вы не можете исправить сервер, добавьте следующие строки в /etc/init.d/inetinit

/usr/sbin/ndd -set /dev/tcp tcp_close_wait_interval 1500
/usr/sbin/ndd -set /dev/tcp tcp_keepalive_interval 1500

и перезагрузиться. Согласно http://www.experts-exchange.com/OS/Unix/Solaris/Q_20568402.html

В качестве альтернативы в Linux попробуйте tcpkill (часть < a href="http://en.wikipedia.org/wiki/DSniff" rel="nofollow">dsniff) или cutter.

person Cees Timmerman    schedule 30.11.2011
comment
ndd — это утилита для Solaris, а где Centos? - person Gamin Goal; 30.11.2011
comment
sysctl -w net.ipv4.tcp_close_wait_interval=1500 ошибка: net.ipv4.tcp_close_wait_interval — неизвестный ключ - person Gamin Goal; 30.11.2011

Был какой-то другой вопрос по этому поводу, который я не могу найти сейчас. Но вы можете попробовать killcx и резак. Я не могу найти ссылку на cutter, но он есть в репозиториях Debian. Обязательно выберите убийцу TCP-соединения, а не фреймворк модульного тестирования с таким же именем.

обновление: кажется, есть версия для Windows

person akostadinov    schedule 17.11.2012