Страница 1 из 2

Отвалившиеся коннекты и KEEPALIVE

Добавлено: 25 июл 2011, 18:40
michaelr
Подскажите пожалуйста есть ли еще способы (кроме настройки tcp_keepalive_time) установить время "висения" на сервере коннекта от неактивного, отвалившегося клиента?


У меня пользователи работают с базой данных через интернет. Firebird и базы находятся на виртуальном (VDS) сервере в интернете,
клиент - приложение Windows32 на машине пользователя.
В программе-клиенте используется ограничение на количество одновременных подключений. Некоторые пользователи имеют право всего на одно подключение.
В результате, если у пользователя произошел обрыв связи (а работают через модем), "коннект" на сервере зависает на 2 часа (параметр tcp_keepalive_time по умолчанию) и
пользователь не может подключится в течении этого времени. А работать то надо.

База находится на виртуальном сервере VDS OpenVZ (Linux Gentoo), чей хостинг не пишу из моральных соображений.
Изменить параметры tcp_keepalive_time, tcp_keepalive_intvl, tcp_keepalive_probes на сервере система не дает (пишет "operation not permitted"),
просил админов хостинга поменять, говорят это невозможно, переходите на другую технологию виртуализации (не OpenVZ). Но хочется остаться на OpenVZ, так как она прилично дешевле.


Подскажите может есть параметры чисто Firebird-а для такой настройки или еще какие-нибудь варианты. Как выйти из ситуации.
Или получается Firebird на OpenVZ не живет?

VDS OpenVZ
Linux Gentoo, ядро 2.6.18
Firebird 2.1.3

PS: Статью http://www.ibase.ru/devinfo/keepalive.htm читал.

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 25 июл 2011, 19:57
dimitr
почитать насчет параметра DummyPacketInterval в firebird.conf

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 26 июл 2011, 09:14
michaelr
Читал в статье и в самом firebird.conf.
Везде пугают его использованием - "не используй".

Из firebird.conf:
# DO NOT USE THIS OPTION. It may hang or crash Windows on the client side as
# explained here: http://support.microsoft.com/default.aspx?kbid=296265
# or may not prevent eventual inactive client disconnection for other OS.


Страшно :)
Интересно его кто-нибудь вообще использует?

И вообще интересно использует ли кто-нибудь Firebird на виртуальных серверах в интеренете с доступом к нему из приложений Windows32.
Почему-то эта тема практически отсутствует в интерете, на форумах.
Неужели windows-интерфейс умер окончательно в пользу web-интерфейса...

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 26 июл 2011, 11:01
dimitr
эта проблема проявляется только если машина-клиент работает сутками напролет и все это время подключена к БД и получает ежеминутные dummy-пакеты, и при этом ее краш крайне не желателен (это сервер приложений, например). Если же интервал выставлен побольше (минут 5-10) и/или если это обычная рабочая станция, которой не особо жалко нажать ресет, то проблема не столь актуальна.

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 26 июл 2011, 11:14
michaelr
Спасибо за ответ.
Попробую этот параметр.

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 26 июл 2011, 12:36
dimitr
уточню свой пост выше - клиент не просто подключен к БД сутками напролет, а вдобавок ничего с БД не делает (не создает никакого трафика кроме серверных пингов). Т.е. 31-го декабря оставили прогу подключенной к базе до конца каникул, например :-)

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 26 июл 2011, 13:37
michaelr
Честно говоря не очень понимаю в каком случае на клиенте происходит/не происходит переполнение памяти и краш.

Если программа ничего не делает? А если делает, то переполнение не происходит?

Видимо так (пока писал, вроде бы сам понял).


Но в таком случае интересно сколько может программа висеть в неактивном состоянии? (хотя из вашего поста следует, что долго). И сбросится ли накопившаяся утечка при неожиданной активизации программы?
А то вдруг какой-нибудь "слишком умный" пользователь действительно будет оставлять программу включенной постоянно, при этом периодически что-то в ней делая.

Используя дедукцию, пришел к выводу :)
Видимо накопление утечки идет постоянно, при неактивности программы она (утечка) увеличивается, при активности - стоит на месте.
Так?

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 26 июл 2011, 14:21
dimitr
когда клиент неактивен, то он не принимает приходящие ему серверные пинги (dummy-пакеты) и они складируются в пуле драйвера TCP-стека, который не резиновый (не уходит в своп) и может переполниться. Как только клиент что-то сделал, то все эти пакеты будут выбраны и драйвер сможет опять принимать пакеты с нуля во время следующего периода неактивности клиента. Память ядра при этом вряд ли освободится, но продолжением утечки это называть неправильно, т.к. она будет использована повторно.

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 26 июл 2011, 16:18
michaelr
Вроде бы понятно :)

Непонятно только почему было нельзя сделать так чтобы машина не зависала, ограничить бы размер этого стека, чтобы не переполнялся.
Незнаю кому это адресовать Microsoft или Firebird Foundation.

В любом случае спасибо за ответы.

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 27 июл 2011, 09:01
michaelr
Вчера попробовал поменять DummyPacketInterval.
Установил в firebird.conf на сервере в 120 (2 минуты), естественно раскомментил.

Подключился клиентом, разорвал соединение (выдернул пачкорд из компа), подождал две минуты с запасом.
Подключаюсь - вижу два подключения. Оборванное не отвалилось.
(пробовал несколько раз)

:(

И смущает, что нигде не написано что после прохождения интервала DummyPacketInterval сервер закроет "висящее" соединение.

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 27 июл 2011, 12:03
kdv
у вас вроде как mediasense включено, т.е. ОС на компе не разрывает коннект при отключении провода?
для dummypacketinterval нужно еще connectiontimeout крутить. Поставьте его в 200, что-ли.

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 27 июл 2011, 19:54
michaelr
Что такое mediasense, как узнать включено оно или нет?
ConnectionTimeout менять в firebird.conf на сервере или на клиенте?

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 27 июл 2011, 21:02
kdv
Что такое mediasense, как узнать включено оно или нет?
ё-мое, открываете статью про KeepAlive, жмете Ctrl-F, искомый текст.
ConnectionTimeout менять в firebird.conf на сервере или на клиенте?
вообще-то, этими штуками сервер занимается. т.е. сервер пинает клиента, а не наоборот.

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 27 июл 2011, 22:25
dimitr
вообще-то, ConnectionTimeout тут совсем не причем, насколько мне помнится. Это клиентский параметр и он отвечает за то, через сколько времени клиент вернет ошибку после безуспешного ожидания ответа от сервера на попытку коннекта.

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 28 июл 2011, 00:07
michaelr
Почитал http://support.microsoft.com/?scid=kb%3 ... &x=13&y=14, подумал ...
Как-то это все очень мутно ... и не имеет очевидной связи с тем, что нужно.

Думаю, придется заюзать другой сервер, возможно Xen технологию или FreeBSD и поменять net.ipv4.tcp_keepalive_time.
Жаль что OpenVZ не может этого делать (всего-то надо было).

Всем спасибо.

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 28 июл 2011, 00:45
hvlad
michaelr писал(а):Вчера попробовал поменять DummyPacketInterval.
Установил в firebird.conf на сервере в 120 (2 минуты), естественно раскомментил.
Firebird перезапустил ?

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 28 июл 2011, 08:18
michaelr
hvlad писал(а):Firebird перезапустил ?
Да, всю VDS перезагрузил.

Заметил другое. Если в программе работать, то через некоторое время вылетает сообщение типа "сервер прервал связь....".
Вроде бы это происходит как раз минуты через 2 если в программе ничего не делать. О как.

Но мне такой эффект не нужен :)
Нужно несколько иное - чтобы отвалившиеся клиенты (по причине обрыва связи; модем например), точнее их коннекты на сервере через пару минут "убивались".

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 28 июл 2011, 08:41
michaelr
Раз уж пошла такая пьянка... вот мой проект www.rm-sklad.ru
Вдруг кому интересно.
(раскрою свое инкогнито, да и реклама заодно, если не удалит модератор :) )

Интересно делает кто-нибудь что-то подобное сейчас. В частности по связи через инет.

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 28 июл 2011, 10:40
dimitr
попробуй обновиться на 2.1.4

Re: Отвалившиеся коннекты и KEEPALIVE

Добавлено: 28 июл 2011, 17:50
michaelr
Почитал релиз к 2.1.4. Ничего про это не нашел.
Смысла особого не вижу, а процесс обновления под линухом муторноват.

Думаю, придется попробовать под xen-ом.