[SOLVED] тихое помирание ipcad

Здравствуйте!

Уже около месяца бьюсь над проблемой со счетчиком трафика ipcad (IP Cisco Accounting Daemon): работая в демонизированном режиме он внезапно останавливается, причем абсолютно тихо и без каких нибудь объяснений (ни в messages ни в dmesg, своих логов у него почемуто нет..) Мож кто сталкивался и может подсказать в чем же дело? Гугление не дало никаких результатов а тыкаться вслепую надоело...

имеется:
VPN сервер на генту (pptpd-1.3.4) авторизация происходит через радиус, радиус-сервер находится на удаленной машине (utm5_radius), ipcad динамически цепляет все ppp интерфейсы и шлет статистику по netflow (v5) на сервер с биллингом (netup UTM5), на сервере круглосуточно висит около 250-300 vpn соединений (в пики активности поднимается не более чем до 400), скорость урезается шейпером (tc из iproute2)

Для страховки сделали скрипт который каждую минуту мониторит состояние ipcad и если тот не шлет статистику и не находится в списке процессов то скрипт перезапускает его заново и шлет на мыло письмо. Самое странное, что ipcad не просто дохнет а именно останавливается (по rc-status его статус отображается как stopped). Если раньше он падал 1 раз за 2-3 дня то сейчас просто пошла какая-то повальная реакция и он начинает падать каждую минуту! И так в течении 5-6 часов а потом опять запускается и работает нормально.. Привязать его не удается ни к какому событию, это может произойти в любое время суток и на любой промежуток времени. Как-то поймал такой глюк, попробовал запустить его в foreground - выдал такую штуку, вот кусочек:

... идет нормальная загрузка, открываются ppp интерфейсы...
Opening ppp186... [LCap] Initialized as 377
Opening ppp258... [LCap] Initialized as 378
Opening ppp287... [LCap] Initialized as 379
*** glibc detected *** ipcad: double free or corruption (fasttop): 0x92c4e488 ***
======= Backtrace: =========
/lib/libc.so.6[0xb7e91a00]
/lib/libc.so.6(cfree+0x89)[0xb7e936f9]
ipcad[0x8055f1c]
ipcad[0x8056037]
ipcad[0x8054af4]
ipcad[0x8055f3d]
..много-много строчек такого типа...
7053e000-70d3e000 rw-p 7053e000 00:00 0
70d3e000-70d3f000 ---p 70d3e000 00:00 0
70d3f000-7153f000 rw-p 70d3f000 00:00 0
7153f000-71540000 ---p 7153f000 00:00 0
71540000-71d40000 rw-p 71540000 00:00 0
71d40000-71d41000 ---p 71d40000 00:00 0
71d41000-72541000 rw-p 71d41000 00:00 0
72541000-72542000 ---p 72541000 00:00 0
72542000-72d42000 rw-p 72542000 0Аварийный останов

в логах, как я уже говорил, пусто, в dmesg внушают подозрения только 3 следующие строчки:

HTB: quantum of class 10010 is small. Consider r2q change.
...
__ratelimit: 568 messages suppressed
Neighbour table overflow.

Но они там попадаются всегда, даже и когда ipcad нормально работает. Есть еще такой момент, сколько бы я за ним ни наблюдал в foreground режиме (максимум было около 7-ми часов) он либо не запускался выдавая описанные выше строки либо нормально работал. Короче перековырял уже все что можно, конфиг и маны искурил до дыр (не такие уж и длинные кстати :)) Помогите кто чем может - не откажусь от любого дельного совета :)

Еще один момент упустил:

Еще один момент упустил: система стоит на рейд массиве из 2-х ide хардов, работает в режиме mirroring, раньше все это работало на 4-ом пеньке 1.5 Ггц а потом "переехала" вместе с рейд массивом на более мощный Core 2 Duo, а проблема началась гдето через неделю после перемещения... Мож здесь куда копнуть можно? Система после "переезда" пересобиралась полностью до последнего пакета...

Кстати, тогда это похоже на

Кстати, тогда это похоже на гонки: возможно программа работает в несколько потоков и выполняет что-то слишком быстро. Можно по приколу привязать её к конкретному ядру и дополнительно нагрузить это ядро.

Также подобная ошибка может быть вызвана тем, что изменилось поведение (ABI) какой-нибудь библиотеки, которую использует эта программа.

Neighbour table overflow. Уже

Neighbour table overflow. Уже давно бы нужно было погуглить.
ndsad умеет работать с iptables ULOG. Почитайте форум utm'а - наврятли кто-то ipcad использует на нагруженных серверах.

Гуглил, только вот прямой

Гуглил, только вот прямой связи с падениями ipcad ненашел (а мож просто ниосилил понять :) )
ndsad уже пробовал, но он отваливается также как и ipcad, с той единственной разницей что он еще более скупой по инфе:
пишет всего лишь 2 слова: "Ошибка сегментирования". А на форуме netup.ru ipcad действительно используют немногие, но нагрузка-то на сервер минимальна: канал в инет узенький ~30 Мбит, load average не превышает 4.00 а загрузка проца даже в самые критические моменты достигает не более 30%

Neighbour table overflow и

Neighbour table overflow и ipcad не связаны. Там же по ссылке довольно четко все написано.

но нагрузка-то на сервер минимальна И это при 400 впн соединениях?

а загрузка проца даже в самые критические моменты достигает не более 30% 1-процессорная машина? Наверно нет. Загрузку тогда лучьше смотреть по всем процессорам # mpstat -P ALL 1 либо htop - там если немного поднастроить, будет удобная цветовая распиновка по процессорам и характеру загрузки.
Что выдаст #cat /sys/devices/system/clocksource/clocksource0/available_clocksource

"Ошибка сегментирования" ndsad дает? Интересно. Что могло повлиять на увеличение частоты вылетов. Может трафик вырос?

Если раньше он падал 1 раз за 2-3 дня то сейчас просто пошла какая-то повальная реакция и он начинает падать каждую минуту! И так в течении 5-6 часов а потом опять запускается и работает нормально.. В пиках нагрузки? Для ресовалки графиков различных можно поставить простой но довольно информативный munin.

И на досуге стоит поизучать netstat -sovetu | sort -nr

Вообще говоря, *** glibc

Вообще говоря, *** glibc detected *** ipcad: double free or corruption (fasttop): 0x92c4e488 *** говорит о том, что налажал программист, который писал утилиту. И решается она двумя способами:
нормальный - перелопатить код программы и найти ошибку (тут поможет valgrind), можно попытаться связаться с разрабортчиком, скинуть ему это сообщение об ошибке, возможно он сможет найти причину. Это именно ошибка в коде.
Вариант номер 2 - костыль. Выявить условия, при которых возникает ошибка (а они могут быть и очень сложными) и придумать, как исключить возникновение этих условий.

В общем по нормальному - только искать ошибку работы с памятью в утилите.

backtrace

Если не сложно. Пересоберите ipcad c символами, как описано здесь:

http://www.gentoo.org/proj/en/qa/backtraces.xml

И соберите backtrace. Если удасться, повесьте на меня (ну или на кого получиться, на меня перекинут) баг на bugs.gentoo.org.

Чтобы обойти проблему, советую использовать ULOG:

interface ulog group <group> [, group <group> ...

ndsad можно попробовать, но не факт, что он принципиально лучше.

Там функция ndsad'а при

Там функция ndsad'а при использовании ULOG, если правильно помню, заключается только в экспорте netflow. Честно говоря первый раз вижу чтобы ndsad с ULOG заваливался, да и не видно в гугле такого(может с конфигом что то не так). Правда уже 2года как в теме сбора статистики не участвую.

Я не говорил, что он

Я не говорил, что он заваливается. Я лишь говорю, что ipcad точно так же умеет работать с ULOG, однако upstream у ipcad'а чуть более просто досигаемый...

Каюсь, не знал что ipcad с

Каюсь, не знал что ipcad с ULOG умеет работать.

1

pva написал(а):
Если не сложно. Пересоберите ipcad c символами, как описано здесь:

http://www.gentoo.org/proj/en/qa/backtraces.xml

И соберите backtrace. Если удасться, повесьте на меня (ну или на кого получиться, на меня перекинут) баг на bugs.gentoo.org.

Чтобы обойти проблему, советую использовать ULOG:

interface ulog group <group> [, group <group> ...

ndsad можно попробовать, но не факт, что он принципиально лучше.

Спасибо за помощь, сделаю :)

calculator написал(а):
Там функция ndsad'а при использовании ULOG, если правильно помню, заключается только в экспорте netflow. Честно говоря первый раз вижу чтобы ndsad с ULOG заваливался, да и не видно в гугле такого(может с конфигом что то не так). Правда уже 2года как в теме сбора статистики не участвую.

Я не использую ULOG, вешаю ipcad прямо на интерфейсы в динамическом режиме а iptables вообще не учавствуют в счете. Если честно то не очень хочется под ULOG все переделывать :), хотелось бы всетаки заставить ipcad работать :)

Не используй динамические

Не используй динамические интерфейсы в конфиге ipcad, он для этого не предназначен. Вместо них - соотв.правила + ulog/ipq

Использовал связку ipcad +

Использовал связку ipcad + ulog: в правила файервола добавил

-I FORWARD 1 -s 0.0.0.0/0 -d xx.xxx.xxx.xxx -j ULOG --ulog-cprange 100 --ulog-nlgroup 1 --ulog-qthreshold 30
-I FORWARD 2 -s xx.xxx.xxx.xxx -d 0.0.0.0/0 -j ULOG --ulog-cprange 100 --ulog-nlgroup 1 --ulog-qthreshold 30

а в ipcad.conf

interface ulog group 1

вот уже неделю все считается правильно и ничего не падает, спасибо всем за помощь и поддержру, проблему считаю решенной

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".