Debian увеличивает ulimit для Asterisk

Вопрос или проблема

Я столкнулся с проблемой с 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. Для этого выполните следующие шаги:

  1. Создайте конфигурационный файл для 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
  2. Перезагрузите systemd:

    После создания или изменения конфигурации необходимо обновить настройки systemd:

    sudo systemctl daemon-reload
  3. Перезапустите 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 и избежать проблем с производительностью или сбоями. Обязательно протестируйте все изменения и следите за производительностью вашей системы после их применения.

Если возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...