Уважаемые IT-Специалисты и Инженеры! Через несколько дней работы в астере (версия 1.8.7.1) появляется ошибка о том, что не хватает дескрипторов файлов и астер перестает открывать новые каналы. Ошибки такого типа:
[Jan 16 10:58:10] ERROR[18611] acl.c: Cannot create socket
[Jan 16 10:58:10] ERROR[18611] res_timing_timerfd.c: Failed to create timerfd timer: Too many open files
[Jan 16 10:58:33] ERROR[18493] cdr_sqlite3_custom.c: disk I/O error. SQL: INSERT INTO cdr
Гугл посоветовал, что следует увеличить количество дескрипторов с помощью ulimit. Я считаю, что это неправильный совет. С помощью команды /usr/bin/lsof | /bin/grep asterisk | /usr/bin/wc -l через cron я мониторил кол-во файлов, открытых астериском. В 11 часов астер подвис, вот фрагмент лога:
2012-01-16 10:55:01 1126
2012-01-16 11:00:02 1219
2012-01-16 11:05:01 485
2012-01-16 11:10:01 590
Потом я сравнил списки открытых файлов во время зависания и после перезапуска. Оказалось, что в момент зависания было более 600 записей открытых сокетов типа (хотя обычная загрузка 20-30 одновременных звонков):
asterisk 16808 root 250u IPv4 110416264 0t0 UDP mc-pbx-01.mcxxi.local:15014
asterisk 16808 root 251u IPv4 112016704 0t0 UDP mc-pbx-01.mcxxi.local:15845
asterisk 16808 root 252u IPv4 107307428 0t0 UDP mc-pbx-01.mcxxi.local:16348
Посоветуйте, пожалуйста, что следует предпринять? Может это быть ошибкой в диалплане (его не приводил, так он более 100кб)? Или следует перейти на версию 1.8.8? Буду благодарен любым советам/комментариям. Спасибо.
варианты
1) обновить астериск(самый лучший)
2) увеличить количество доступных сокетов командой ulimit -n перед запуском астериска.
3) перегружать астериск раз в 5 дней ночью(я так делаю на большинстве нагрженных серверов)
Задан: 2012-01-16 13:30:32 +0400
Просмотрен: 2,161 раз
Обновлен: Jan 16 '12
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.