Когда процессу не дают дышатьСимптом:Приложение падает с ошибкой, а ты смотришь вроде ресурсов полно.
Too many open files
Виноват ulimitКаждый процесс в Linux живёт в рамках ограничений ядра -
ulimits. Одно из них
nofile, максимум открытых файловых дескрипторов. Файл, сокет, pipe - всё это дескрипторы.
Посмотреть текущие лимиты:
ulimit -n
увидишь, например:
1024
Это значит, что твой процесс не может держать больше 1024 открытых файлов и соединений.
Как увеличитьИногда это нужно для высоконагруженных сервисов, например, база данных, reverse-proxy или API, который держит тысячи открытых соединений. Если лимит слишком маленький, то приложение начнёт падать на пике трафика.
Временно (для текущей сессии):
ulimit -n 65535
Навсегда — в
/etc/security/limits.conf или
/etc/systemd/system.conf:
* soft nofile 65535
* hard nofile 65535
Если сервис под systemd, добавь в unit-файл:
[Service]
LimitNOFILE=65535
и перезапусти:
systemctl daemon-reexec
systemctl restart <service>
Осторожно с лимитамиУвеличивать можно, но без фанатизма. Слишком высокий
nofile при множестве активных процессов может съесть память и дескрипторы ядра, Особенно если приложение не закрывает файлы корректно. Поэтому лучше провести ревизию приложения вначале.
ВыводToo many open files - это не баг, а защита ядра. Если приложение задыхается, то можно увеличить лимиты. Главное понимать почему в приложении появляется данная проблема
LinuxCamp | #utils