Вопрос или проблема
Я столкнулся с проблемой с Asterisk 13.11.2 на Debian 8, когда он зависает после достижения предела открытых файлов
bridge_channel.c: Не удается создать канал! Попробуйте увеличить максимальное количество дескрипторов файлов с помощью ulimit -n
Мне удалось увеличить предел с 65536 до 150000, используя /etc/security/limits.conf
Я добавил следующее:
root soft nofile 150000
root hard nofile 150000
* soft nofile 150000
* hard nofile 150000
Результат ulimit -n
теперь 150000
Когда я пытаюсь проверить предел для процесса Asterisk cat /proc/xxx/limits
Я все еще получаю старый лимит!
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 31945 31945 processes
Max open files 1024 4096 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 31945 31945 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
Как это решить?
Раскомментируйте и измените значение MAXFILES в /usr/sbin/safe_asterisk
например:
MAXFILES = 150000
Сохраните файл и перезапустите asterisk
Сделано
Я подозреваю, что ваша система использует systemd, который игнорирует /etc/security/limits.conf
. Вместо этого вам нужно настроить эти лимиты в файле службы asterisk (/etc/systemd/system/asterisk.service
или /lib/systemd/system/asterisk.service
). Вероятно, вы захотите добавить
LimitNOFILE=150000
Обратите внимание, что вам, вероятно, не нужно редактировать файл, который идет вместе с Asterisk, так как вы рискуете тем, что ваши изменения будут перезаписаны с следующим обновлением Asterisk. Вместо этого я рекомендую создать файл /etc/systemd/system/asterisk.d/10-file-descriptors.conf
с вышеупомянутой строкой. Затем systemd автоматически дополнит официальный файл службы вашей конфигурацией.
Установите следующие параметры в asterisk.conf
[options]
internal_timing = no
maxfiles = 999999
Ответ или решение
Чтобы увеличить лимит файловых дескрипторов в Asterisk на Debian 8, потребуется внести несколько изменений как системного, так и конфигурационного характера. Ниже представлена подробная инструкция, которая поможет вам успешно решить возникшую проблему.
1. Информация о проблеме
Вы столкнулись с сообщением об ошибке Asterisk:
bridge_channel.c: Can't create pipe! Try increasing max file descriptors with ulimit -n
Это указывает на то, что количество открытых файловых дескрипторов достигло своего предела. Вы уже увеличили лимит в файле /etc/security/limits.conf
, что является важным шагом. Однако, для процессов, управляемых systemd, необходимо внести дополнительные изменения.
2. Настройка limits.conf
В первую очередь, убедитесь, что ваш файл /etc/security/limits.conf
содержит следующие строки:
root soft nofile 150000
root hard nofile 150000
* soft nofile 150000
* hard nofile 150000
Это обеспечит достаточные лимиты для всех пользователей и, в частности, для пользователя root. Однако для Asterisk, который запускается как сервис systemd, этого может быть недостаточно.
3. Изменение конфигурации systemd
Kadéa нужно проверить, как именно под управлением systemd запускается Asterisk. Для этого выполните следующие шаги:
-
Создайте конфигурационный файл для Asterisk:
Для вашего случая рекомендуется создать специальный файл, чтобы сохранить изменения и избежать их перезаписи при обновлениях:
sudo mkdir -p /etc/systemd/system/asterisk.d echo "[Service]" | sudo tee /etc/systemd/system/asterisk.d/10-file-descriptors.conf echo "LimitNOFILE=150000" | sudo tee -a /etc/systemd/system/asterisk.d/10-file-descriptors.conf
-
Перезагрузите systemd:
После создания или изменения конфигурации необходимо обновить настройки systemd:
sudo systemctl daemon-reload
-
Перезапустите Asterisk:
Теперь перезапустите службу Asterisk для применения новых лимитов:
sudo systemctl restart asterisk
4. Проверка изменений
Чтобы убедиться, что изменения были успешно применены, проверьте лимиты открытых файлов в процессе Asterisk:
cat /proc/$(pidof asterisk)/limits
Здесь вы должны видеть, что значение для Max open files
теперь равно 150000.
5. Изменение конфигурации Asterisk
Дополнительно в конфигурационном файле Asterisk (asterisk.conf
), вы можете установить максимальное количество файловых дескрипторов:
[options]
internal_timing = no
maxfiles = 999999
Заключение
Следуя этим шагам, вы сможете устранить ограничение на количество открытых файловых дескрипторов в Asterisk на Debian и избежать проблем с производительностью или сбоями. Обязательно протестируйте все изменения и следите за производительностью вашей системы после их применения.
Если возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.