Как убрать зависшие коннекты?

Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать

Модераторы: kdv, dimitr

Василий Овчинников
Сообщения: 14
Зарегистрирован: 04 мар 2005, 15:33

Сообщение Василий Овчинников » 15 мар 2005, 12:32

v6y писал(а): А wait, IMHO, лучше не трогать.
Спасибо, не буду. Я еще ничего не делал пока. Продумываю, в какую сторону дальше шагнуть.

Василий Овчинников
Сообщения: 14
Зарегистрирован: 04 мар 2005, 15:33

Сообщение Василий Овчинников » 17 мар 2005, 15:10

Эксперименты заканчиваю, т.к. получил полную ясность в интересующих меня вопросах отключения "мертвых" клиентов на FB CS 1.5.2 под Linux.

1)Сделал в firebird.conf
#DummyPacketsInterval=0
т.е. отключил механизм Dummy Packets

2)/etc/xinet.d/firebird
все по-умолчанию, как доктор прописал при установке. Ничего добавлять не стал.
Пробовал во FLAGS дописывать KEEPALIVE и NODELAY.
FLAGS=REUSE KEEPALIVE NODELAY в разных комбинациях. Поведение сервера стабильно правильное при всех комбинациях этих параметров.
На мудрствуя лукаво оставил
FLAGS=REUSE

3)
/proc/sys/net/tcp_keepalive_time = 15
/proc/sys/net/tcp_keepalive_intvl = 10
/proc/sys/net/tcp_keepalive_probes = 5

4) Коннектимся к серверу с клиента и больше ничего с него не делаем.
5) Смотрим трафик на сервере.
При указанной конфигурации /proc/sys/net/tcp_keepalive_* через 15 секунд с момента наступления тишины в канале идет проба со стороны сервера пустым пакетом.
Если клиент жив, он серверу гонит ответный пакет. Еще через 15 секунд проверка повторяется и т.д.
6) Если клиента отключить физически, то на пробу сервера ответа от клиента не приходит и серdер начинает с 10-ти секундным интервалом посылать пробы. Если на пятую пробу клиент не ответил, то то еще через 10 секунд серверный экземпляр выгружается, освобождая ресурсы и блокировки.
Если клиент подал признаки жизни, то он откликается хотя бы и на пятую пробу (худший случай) сервера, и этот ответ содержит флаг RST, закрывающий соединение. Только в этом случае инициатором закрытия соединения является клиент. Сервер опять же корректно завершает работу с этим соединением.

Всем удачи.

--
С уважением,
Овчинников Василий,
АСУ автовокзалов,
Тула

v6y
Сообщения: 78
Зарегистрирован: 12 мар 2005, 17:45

Сообщение v6y » 18 мар 2005, 12:24

Василий Овчинников писал(а): /proc/sys/net/tcp_keepalive_time = 15
/proc/sys/net/tcp_keepalive_intvl = 10
/proc/sys/net/tcp_keepalive_probes = 5
А какие значения были сначала? Хочу со своими сравнить ради интереса, соответственно:
7200
75
9

Василий Овчинников
Сообщения: 14
Зарегистрирован: 04 мар 2005, 15:33

Сообщение Василий Овчинников » 18 мар 2005, 14:07

v6y писал(а): А какие значения были сначала? Хочу со своими сравнить ради интереса, соответственно:
7200
75
9
Такие, как ты написал, и были
7200
75
9
Для реального времени они совсем не подходят. 7200 - это два часа, да еще 9 раз по 75 секунд -это 11 мин 15 сек, да еще 75 секунд, итого
по-усмолчанию только через 2 часа 12 мин 30 сек сервер отключит мертвое соединение.

v6y
Сообщения: 78
Зарегистрирован: 12 мар 2005, 17:45

Сообщение v6y » 19 мар 2005, 16:52

Василий Овчинников писал(а): Такие, как ты написал, и были
7200
75
9
Thks.

Ответить