Спасибо, не буду. Я еще ничего не делал пока. Продумываю, в какую сторону дальше шагнуть.v6y писал(а): А wait, IMHO, лучше не трогать.
Как убрать зависшие коннекты?
-
- Сообщения: 14
- Зарегистрирован: 04 мар 2005, 15:33
-
- Сообщения: 14
- Зарегистрирован: 04 мар 2005, 15:33
Эксперименты заканчиваю, т.к. получил полную ясность в интересующих меня вопросах отключения "мертвых" клиентов на 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, закрывающий соединение. Только в этом случае инициатором закрытия соединения является клиент. Сервер опять же корректно завершает работу с этим соединением.
Всем удачи.
--
С уважением,
Овчинников Василий,
АСУ автовокзалов,
Тула
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, закрывающий соединение. Только в этом случае инициатором закрытия соединения является клиент. Сервер опять же корректно завершает работу с этим соединением.
Всем удачи.
--
С уважением,
Овчинников Василий,
АСУ автовокзалов,
Тула
-
- Сообщения: 14
- Зарегистрирован: 04 мар 2005, 15:33
Такие, как ты написал, и былиv6y писал(а): А какие значения были сначала? Хочу со своими сравнить ради интереса, соответственно:
7200
75
9
7200
75
9
Для реального времени они совсем не подходят. 7200 - это два часа, да еще 9 раз по 75 секунд -это 11 мин 15 сек, да еще 75 секунд, итого
по-усмолчанию только через 2 часа 12 мин 30 сек сервер отключит мертвое соединение.