Вход на сайт

Навигация

Сейчас на сайте

1 пользователь онлайн.

  • winterheart

Сбор новостей

Подписка на Сбор новостей

Вы здесь

[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. Уже давно бы нужно было погуглить.
ndsad умеет работать с iptables ULOG. Почитайте форум utm'а - наврятли кто-то ipcad использует на нагруженных серверах.

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

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

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

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

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

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

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

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

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

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

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

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

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 + 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

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