Отвалившиеся коннекты и KEEPALIVE
Модераторы: kdv, Alexey Kovyazin
Отвалившиеся коннекты и KEEPALIVE
Подскажите пожалуйста есть ли еще способы (кроме настройки 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 читал.
У меня пользователи работают с базой данных через интернет. 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
почитать насчет параметра DummyPacketInterval в firebird.conf
Re: Отвалившиеся коннекты и KEEPALIVE
Читал в статье и в самом 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-интерфейса...
Везде пугают его использованием - "не используй".
Из 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
эта проблема проявляется только если машина-клиент работает сутками напролет и все это время подключена к БД и получает ежеминутные dummy-пакеты, и при этом ее краш крайне не желателен (это сервер приложений, например). Если же интервал выставлен побольше (минут 5-10) и/или если это обычная рабочая станция, которой не особо жалко нажать ресет, то проблема не столь актуальна.
Re: Отвалившиеся коннекты и KEEPALIVE
Спасибо за ответ.
Попробую этот параметр.
Попробую этот параметр.
Re: Отвалившиеся коннекты и KEEPALIVE
уточню свой пост выше - клиент не просто подключен к БД сутками напролет, а вдобавок ничего с БД не делает (не создает никакого трафика кроме серверных пингов). Т.е. 31-го декабря оставили прогу подключенной к базе до конца каникул, например
Re: Отвалившиеся коннекты и KEEPALIVE
Честно говоря не очень понимаю в каком случае на клиенте происходит/не происходит переполнение памяти и краш.
Если программа ничего не делает? А если делает, то переполнение не происходит?
Видимо так (пока писал, вроде бы сам понял).
Но в таком случае интересно сколько может программа висеть в неактивном состоянии? (хотя из вашего поста следует, что долго). И сбросится ли накопившаяся утечка при неожиданной активизации программы?
А то вдруг какой-нибудь "слишком умный" пользователь действительно будет оставлять программу включенной постоянно, при этом периодически что-то в ней делая.
Используя дедукцию, пришел к выводу
Видимо накопление утечки идет постоянно, при неактивности программы она (утечка) увеличивается, при активности - стоит на месте.
Так?
Если программа ничего не делает? А если делает, то переполнение не происходит?
Видимо так (пока писал, вроде бы сам понял).
Но в таком случае интересно сколько может программа висеть в неактивном состоянии? (хотя из вашего поста следует, что долго). И сбросится ли накопившаяся утечка при неожиданной активизации программы?
А то вдруг какой-нибудь "слишком умный" пользователь действительно будет оставлять программу включенной постоянно, при этом периодически что-то в ней делая.
Используя дедукцию, пришел к выводу
Видимо накопление утечки идет постоянно, при неактивности программы она (утечка) увеличивается, при активности - стоит на месте.
Так?
Re: Отвалившиеся коннекты и KEEPALIVE
когда клиент неактивен, то он не принимает приходящие ему серверные пинги (dummy-пакеты) и они складируются в пуле драйвера TCP-стека, который не резиновый (не уходит в своп) и может переполниться. Как только клиент что-то сделал, то все эти пакеты будут выбраны и драйвер сможет опять принимать пакеты с нуля во время следующего периода неактивности клиента. Память ядра при этом вряд ли освободится, но продолжением утечки это называть неправильно, т.к. она будет использована повторно.
Re: Отвалившиеся коннекты и KEEPALIVE
Вроде бы понятно
Непонятно только почему было нельзя сделать так чтобы машина не зависала, ограничить бы размер этого стека, чтобы не переполнялся.
Незнаю кому это адресовать Microsoft или Firebird Foundation.
В любом случае спасибо за ответы.
Непонятно только почему было нельзя сделать так чтобы машина не зависала, ограничить бы размер этого стека, чтобы не переполнялся.
Незнаю кому это адресовать Microsoft или Firebird Foundation.
В любом случае спасибо за ответы.
Re: Отвалившиеся коннекты и KEEPALIVE
Вчера попробовал поменять DummyPacketInterval.
Установил в firebird.conf на сервере в 120 (2 минуты), естественно раскомментил.
Подключился клиентом, разорвал соединение (выдернул пачкорд из компа), подождал две минуты с запасом.
Подключаюсь - вижу два подключения. Оборванное не отвалилось.
(пробовал несколько раз)
И смущает, что нигде не написано что после прохождения интервала DummyPacketInterval сервер закроет "висящее" соединение.
Установил в firebird.conf на сервере в 120 (2 минуты), естественно раскомментил.
Подключился клиентом, разорвал соединение (выдернул пачкорд из компа), подождал две минуты с запасом.
Подключаюсь - вижу два подключения. Оборванное не отвалилось.
(пробовал несколько раз)
И смущает, что нигде не написано что после прохождения интервала DummyPacketInterval сервер закроет "висящее" соединение.
Re: Отвалившиеся коннекты и KEEPALIVE
у вас вроде как mediasense включено, т.е. ОС на компе не разрывает коннект при отключении провода?
для dummypacketinterval нужно еще connectiontimeout крутить. Поставьте его в 200, что-ли.
для dummypacketinterval нужно еще connectiontimeout крутить. Поставьте его в 200, что-ли.
Re: Отвалившиеся коннекты и KEEPALIVE
Что такое mediasense, как узнать включено оно или нет?
ConnectionTimeout менять в firebird.conf на сервере или на клиенте?
ConnectionTimeout менять в firebird.conf на сервере или на клиенте?
Re: Отвалившиеся коннекты и KEEPALIVE
ё-мое, открываете статью про KeepAlive, жмете Ctrl-F, искомый текст.Что такое mediasense, как узнать включено оно или нет?
вообще-то, этими штуками сервер занимается. т.е. сервер пинает клиента, а не наоборот.ConnectionTimeout менять в firebird.conf на сервере или на клиенте?
Re: Отвалившиеся коннекты и KEEPALIVE
вообще-то, ConnectionTimeout тут совсем не причем, насколько мне помнится. Это клиентский параметр и он отвечает за то, через сколько времени клиент вернет ошибку после безуспешного ожидания ответа от сервера на попытку коннекта.
Re: Отвалившиеся коннекты и KEEPALIVE
Почитал http://support.microsoft.com/?scid=kb%3 ... &x=13&y=14, подумал ...
Как-то это все очень мутно ... и не имеет очевидной связи с тем, что нужно.
Думаю, придется заюзать другой сервер, возможно Xen технологию или FreeBSD и поменять net.ipv4.tcp_keepalive_time.
Жаль что OpenVZ не может этого делать (всего-то надо было).
Всем спасибо.
Как-то это все очень мутно ... и не имеет очевидной связи с тем, что нужно.
Думаю, придется заюзать другой сервер, возможно Xen технологию или FreeBSD и поменять net.ipv4.tcp_keepalive_time.
Жаль что OpenVZ не может этого делать (всего-то надо было).
Всем спасибо.
Re: Отвалившиеся коннекты и KEEPALIVE
Firebird перезапустил ?michaelr писал(а):Вчера попробовал поменять DummyPacketInterval.
Установил в firebird.conf на сервере в 120 (2 минуты), естественно раскомментил.
Re: Отвалившиеся коннекты и KEEPALIVE
Да, всю VDS перезагрузил.hvlad писал(а):Firebird перезапустил ?
Заметил другое. Если в программе работать, то через некоторое время вылетает сообщение типа "сервер прервал связь....".
Вроде бы это происходит как раз минуты через 2 если в программе ничего не делать. О как.
Но мне такой эффект не нужен
Нужно несколько иное - чтобы отвалившиеся клиенты (по причине обрыва связи; модем например), точнее их коннекты на сервере через пару минут "убивались".
Re: Отвалившиеся коннекты и KEEPALIVE
Раз уж пошла такая пьянка... вот мой проект www.rm-sklad.ru
Вдруг кому интересно.
(раскрою свое инкогнито, да и реклама заодно, если не удалит модератор )
Интересно делает кто-нибудь что-то подобное сейчас. В частности по связи через инет.
Вдруг кому интересно.
(раскрою свое инкогнито, да и реклама заодно, если не удалит модератор )
Интересно делает кто-нибудь что-то подобное сейчас. В частности по связи через инет.
Re: Отвалившиеся коннекты и KEEPALIVE
попробуй обновиться на 2.1.4
Re: Отвалившиеся коннекты и KEEPALIVE
Почитал релиз к 2.1.4. Ничего про это не нашел.
Смысла особого не вижу, а процесс обновления под линухом муторноват.
Думаю, придется попробовать под xen-ом.
Смысла особого не вижу, а процесс обновления под линухом муторноват.
Думаю, придется попробовать под xen-ом.