LINUX.ORG.RU

Пакеты доходят до процесса с задержкой.


0

1

Здравстсвуйте! Сервер (Linux Centos os, epoll), listen сокет REUSE_ADDR где-то 30 клиентов (GPRS) отсылают с переиодичностью 20 -70 секунд пакеты размером до 900 байт на сервер -> на процесс который слушает один порт с помощью epollа ->дальше в базу Алгоритм работы: клиент отсылает пакет handshake на сервер, после ответа на него сервером начинает слать пакеты данных.

Месяц все работало отлично, тут неожиданно перестало все сыпаться в базу,

Что я выснил: Все клиенты устанавливают соединение с сервером в netstat сервера появляются они в состоянии ESTABILISHED и сразу отсылает пакет - handshake - сервер успешно принимает его только через 5-15 минут! хотя если запустить tcpdump на сервер и сэмулировать отправку пакетов на этот порт то все пакеты проходят моментально.

Если ребутнуть сервер, причем после остановки дождаться закрытия всех соединений, то все работает замечательно но теперь каждые 1-3 раза в сутки происходят такие ужасные вещи о которых я написал выше.

Написано на c++ логи делаю с помощью syslog.

Помогите пожалуйста! не представляю что делать! уже неделю бьюсь и все заканчивается ребутом и моральнам унынием от безпомощности! Какие дампы нужно скинуть чтобы хотя бы понять куда копать?

Заранее огромное спасибо!

тут два варианта - либо баг в сервере, либо баг в ядре. я бы сперва прогнал серв через valgrind, чтоб исключить вариант с ошибками при работе с памятью. затем попробовать другие версии ядра/другой дистр.

ioan ()
Ответ на: комментарий от Dronnikkl

Мне бы тоже хотелось бы посмотреть.

Сетевой драйвер не самописный? Сетевая карта полностью поддерживается ядром?

hibou ★★★★★ ()

баг явно в вашем сервере
или (крайне вероятно) в фаерволе провайдера

чтобы пакет доходил через 5-15 минут ... это гдеж он гулять то должен стока времени

ae1234 ★★ ()

запусти сервер твой без валгрида

дождись начала проблем
а потом сделай
strace -f -p PID_СЕРВЕРА >log 2>&1
дождись прохода нескольких пакетов
и давай сюда лог - через pastebin

ae1234 ★★ ()
Ответ на: комментарий от Dronnikkl

тоесть когда сервер начинает глючить
и если ты в этот момент сделать tcpdump
то сервер тутже начинает нормально работать ?

tcpdump промиск режим включает на интерфейсе = может изза этого

ae1234 ★★ ()

опциями сокета типа RCVLOWAT RCVTIMEO часом не играетесь по ходу пьесы ?

Какие дампы нужно скинуть чтобы

лучше скинуть пару кусков кода :) всё-ж тут Development раздел..

MKuznetsov ★★★★★ ()
Ответ на: комментарий от Dronnikkl

Они не доходят до процесса,если tcpdump делаю то все моментально перехватывает

Не доходит что конкретно? Если tcp negotiation, то и не должно. tcpdump -A -s 65535 -i <интерфейс> tcp port 5001 показывает пакеты с данными?

В /etc/sysconfig/iptables порт 5001, который твой софт использует, не открыт. Или iptables совсем опустил?

mv ★★★★★ ()
Ответ на: комментарий от Dronnikkl

Только starce'у ещё дайте опцию -tt, чтобы для каждого системного вызова было видно время, чтобы легко было сопоставлять его с tcpdump'ом.

mky ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.