Too many open files in system

В общем логе (messages) или в логе любого сервиса таких как httpd, nginx, mysql, exim видим ошибку

Too many open files in system

или

24: too many open files

Не достаточно лимита открытых файлов. По умолчанию в системе он установлен в 1024. Этого не достаточно. Проверим текущий лимит командами:

cat /proc/sys/fs/file-max
#второй вариант проверить
ulimit -n

Проверяем текущее значение открытых файлов в системе:

cat /proc/sys/fs/file-nr

у нас будет 3 числа. Первое это текущее количество открытых файлов, второе число открытых, но не используемых файлов и третье число лимит открытых файлов

Давайте изменим:

vi /etc/sysctl.conf

Добавляем в файл строку

fs.file-max = 65535

применяем изменения командой

sysctl -p

Теперь изменим лимит в /etc/security/limits.conf

vi /etc/security/limits.conf

и добавляем строки:

* hard nofile 65535
* soft nofile 65535

После этого необходимо перезагрузить сервер.
Рекомендую еще задать лимиты в /etc/systemd/system.conf
vi  /etc/systemd/system.conf

Добавляем или меняем значения:

DefaultLimitNOFILE=infinity
DefaultLimitMEMLOCK=infinity

Применяем изменения:

systemctl daemon-reload

После этого необходимо еще перезагрузить сервис по которому мы получали ошибку «too many open files»

Отдельно можно задать лимит для каждого сервиса. Например для nginx:

systemctl edit --full nginx.service

Находим секцию [Service] и там меняем или добавляем строку:

LimitNOFILE=30720

после изменения необходимо выполнить systemctl daemon-reload и systemctl restart nginx.

чтобы проверить лимит под пользователем (не под root) выполним

runuser -u nginx -- bash
ulimit -Hn
ulimit -Sn

Мы заходим под пользователя nginx и смотрим сначала Hard лимит и вторая команда покажет Soft лимит пользователя.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

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