Здравствуйте!У меня на FreeBSD для подсчета трафика исполуется ipacctd
Трафик через канал около 4 гигабайт в сутки со средней скоростью около 100 килобайт в секунду и максимальной - до мегабайта.
Очень много одновременных соединений на разные адреса (работают файлообменные системы у юзеров).ipacctd почему-то ругается следующим образом
Jan 20 14:48:23 ftp ipacctd[493]: (port 10000) send: No buffer space available
Jan 20 14:48:49 ftp last message repeated 79 times
Jan 20 14:49:23 ftp last message repeated 68 times
Jan 20 14:49:23 ftp ipacctd[493]: (port 10000) send: No buffer space available
Jan 20 14:49:54 ftp last message repeated 331 times
Jan 20 14:50:21 ftp last message repeated 171 times
Jan 20 14:50:33 ftp ipacctd[493]: (port 10000) send: No buffer space available
Jan 20 14:51:05 ftp last message repeated 178 times
Jan 20 14:51:19 ftp last message repeated 46 timesИ так далее. При этом он не вылетает, а продолжает работать. Причем я не могу понять, на какой буфер он ругается.
Указанного в конфигурации буфера вполне должно хватать для смягчения всех скачков скорости (которых почти нет).Ранее я указал размер буфера равный размеру kern.ipc.maxsockbuf который у меня равен 4194304 ошибка не изчезла.
Тогда подумал, что он ругается именно на то, что размер буфера указан слишком большим и он его не может создать, и убрал эту опцию. То есть стал использоваться размер буфера по умолчанию -ошибка та же._____________________
Есть ещё одна проблема. Он почему-то в лог при большой нагрузке (много соединий) пишет некоторые строчки с ошибками. Не дописывает их до конца (заканчивая где-то перед трафиком по направлению и следующую строку пишет без переноса строки вплотную), из за чего сбоит биллинг.
Я думал, что ему не хватает памяти для хранения записей. Согласно описанию использовал опцию -m (максимальное кол-во хранящихся записей).
Причём в описании не написано максимальное значение этой опции.
Увеличение до нескольких миллионов ничего не дало. Я подумал, что число 16-ти битное и поставил его в максимальное значение (а вдруг оно ещё и знаковое? но тогда какой смысл указывать 32535, если и так по умолчанию стоит 30000 записей). Ни к чему особо это не привело.
Я снижал периодичность сброса данных с 1 часа вплоть до 5 минут (по мере возрастания нагрузки - когда включали "ослов" - самая ужасная вещь для подсчитывающей системы), это помогло. Но не до конца. Ошибки всё равно остались!Сейчас процесс запускается с такими опциями:
ipacctd -m 65535 -v -w -p 10000
Может быть кто-нибудь знает, как его настроить, чтобы ошибок, а главное выпадений не было! Ещё неизвестно, сколько трафика он не подсчитвает.Раньше пробовал использовать netacct, но он вообще глючил по страшному. Не засчитывал трафик. ipacctd мне очень нравится в том числе и по способу использования (через divert).
Кто-нибудь знает, отчего появляется такая ошибка?
>Кто-нибудь знает, отчего появляется такая ошибка?
Могу только предположить, ибо работал только с ng_ipacct. Так вот, там подобная ошибка вылетает при наличии большого траффика и не хватки threshold и соответственно низкого объема памяти ядра. сам ipacct в чистом виде трогал очень давно... Так что попробуйте чаще снимать данные, и обнулять счетчик.
Снимаю каждые 3 минуты! Логи от этого становятся огромные. Раньше делал это раз в час. Ошибку выдаёт независимо (когда раз в час делал, поменял сначала на 15 минут ,потом на 10, потом на 3 - не помогает).А какой памяти может нехватать? Как это исправить?
И какое максимальное кол-во строк в памяти (опция -m) можно указывать? По умолчанию используется 30 000. Я пробовал указывать несколько миллионов, результата нет. На самом деле там всё же менее 30 тыс за 3 минуты должно накапливаться.
Причём такие ошибки на двух разных серверах. Даже версии там фри различаются 4.9 и 4.10. Только там, где соединений меньше поток они реже выходят.
>Снимаю каждые 3 минуты! Логи от этого становятся огромные. Раньше делал
>это раз в час. Ошибку выдаёт независимо (когда раз в
>час делал, поменял сначала на 15 минут ,потом на 10, потом
>на 3 - не помогает).
>
>А какой памяти может нехватать? Как это исправить?
>
>И какое максимальное кол-во строк в памяти (опция -m) можно указывать? По
>умолчанию используется 30 000. Я пробовал указывать несколько миллионов, результата
>нет. На самом деле там всё же менее 30
>тыс за 3 минуты должно накапливаться.
>
>Причём такие ошибки на двух разных серверах. Даже версии там фри различаются
>4.9 и 4.10. Только там, где соединений меньше поток
> они реже выходят.
параметры различных буферов НЕЛЬЗЯ указывать от балды, почитайте
man tuning и NOTES, там можно достаточно полезного вытянуть, но
ПРОСТО на поверхности, ничего не лежит. В дополнение к этому
поищите по спискам рассылки.