У нас около 500 клиентов подключены к серверу RedHat ES 5 Linux. В последнее время происходит, что сервер по-прежнему содержит соединения с клиентами, которые были перезагружены без остановки приложения, которое общается с сервером раньше. Netstat на клиенте всегда возвращает только одно установленное соединение с сервером. После перезагрузки клиента связь выполняется по новому установленному соединению. Иногда на стороне сервера старое соединение закрывается, иногда оно остается в состоянии, установленном так, что у нас растет число установленных соединений с каждым клиентом. Поскольку различные клиентские операционные системы затронуты, я думаю, что это не проблема приложения, а одна из ОС Linux на сервере. Я пытался настроить значения изСлишком много постоянных TCP-соединений
- net.ipv4.tcp_keepalive_time = 600
- net.ipv4.tcp_keepalive_intvl = 10
- net.ipv4.tcp_keepalive_probes = 9
без успеха. Также я попытался установить максимальное значение дескриптора файла с 1024 на 2048, но соединения все равно никогда не закрываются, даже после истечения времени ожидания TCP. Есть ли у кого-нибудь идея, что может вызвать это странное поведение?
Привет, Гил, спасибо за ваш ответ! Я думаю, что параметры keepalive работают только для соединений в состоянии TIMED_WAIT, но соединения остаются ESTABLISHED. Кажется, что сервер не получает сигнал, чтобы закрыть соединение, возможно, потому что клиент закрыт, прежде чем он сможет отправить FIN или что-то в этом роде. Но как я могу избежать этого? – Airogat
№ Keepalives предназначены для отключения соединений в состоянии ESTABLISHED. Но вам нужно включить его. –