Слишком много открытых файлов
Каждый процесс в Linux работает с определёнными ограничениями. Одно из таких ограничений — это количество файлов и сетевых сокетов, которые процесс может открыть одновременно. Если это ограничение слишком низкое, вы можете увидеть ошибку Слишком много открытых файлов.
Astra и лимиты открытых файлов
Заголовок раздела «Astra и лимиты открытых файлов»В Astra эта ошибка может появиться, если системное ограничение установлено недостаточно высоким. По умолчанию, если вы устанавливали Astra с помощью команды astra init (как описано в нашем руководстве по быстрому старту), лимит устанавливается на 65536 открытых файлов. Обычно этого значения достаточно для большинства случаев.
Если вы запускаете Astra другим способом, убедитесь, что лимит открытых файлов установлен правильно. Ниже приведены распространённые варианты.
Запуск с помощью init.d
Заголовок раздела «Запуск с помощью init.d»При использовании скрипта init.d необходимо увеличить лимит перед запуском Astra. Добавьте строку ulimit -n 65536 перед командой запуска Astra.
Пример скрипта:
if [ "$1" = "start" ]; then /usr/bin/astra -c /etc/astra/astra.conf -p 8000 --pid /var/run/astra.pid --log /var/log/astra.log --daemonelif [ "$1" = "stop" ]; then if [ -f /var/run/astra.pid ]; then kill $(cat /var/run/astra.pid) fielif [ "$1" = "restart" ]; then $0 stop sleep 1 $0 startfiЗапуск с помощью systemd
Заголовок раздела «Запуск с помощью systemd»Для сервисов systemd лимит нужно указать внутри файла сервиса. В секции [Service] добавьте строку:
[Service]Type=simpleLimitNOFILE=65536ExecStart=/usr/bin/astra -c /etc/astra/astra.conf -p 8000 --log /var/log/astra.log --no-stdoutЭто гарантирует, что Astra сможет открыть достаточно файлов и сокетов без возникновения ошибки.
Проверка текущего лимита
Заголовок раздела «Проверка текущего лимита»Вы можете проверить текущий лимит открытых файлов для запущенного процесса с помощью команд ulimit или cat.
Если вы находитесь в той же оболочке, где запущена Astra, выполните команду:
ulimit -nОна покажет максимальное количество открытых файлов для этой оболочки (и всех процессов, запущенных из неё).
Если Astra уже работает как демон, найдите его идентификатор процесса (PID) и проверьте напрямую:
pidof astraЭта команда вернёт PID процесса Astra. Затем выполните:
cat /proc/<PID>/limits | grep "open files"Пример вывода:
Max open files 65536 65536 files