Перейти к содержимому

Слишком много открытых файлов

Каждый процесс в Linux работает с определёнными ограничениями. Одно из таких ограничений — это количество файлов и сетевых сокетов, которые процесс может открыть одновременно. Если это ограничение слишком низкое, вы можете увидеть ошибку Слишком много открытых файлов.

В Astra эта ошибка может появиться, если системное ограничение установлено недостаточно высоким. По умолчанию, если вы устанавливали Astra с помощью команды astra init (как описано в нашем руководстве по быстрому старту), лимит устанавливается на 65536 открытых файлов. Обычно этого значения достаточно для большинства случаев.

Если вы запускаете Astra другим способом, убедитесь, что лимит открытых файлов установлен правильно. Ниже приведены распространённые варианты.

При использовании скрипта 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 --daemon
elif [ "$1" = "stop" ]; then
if [ -f /var/run/astra.pid ]; then
kill $(cat /var/run/astra.pid)
fi
elif [ "$1" = "restart" ]; then
$0 stop
sleep 1
$0 start
fi

Для сервисов systemd лимит нужно указать внутри файла сервиса. В секции [Service] добавьте строку:

[Service]
Type=simple
LimitNOFILE=65536
ExecStart=/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