В общем логе (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.confvi /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 лимит пользователя.