tgoop.com/linuxcamp_tg/510
Create:
Last Update:
Last Update:
Когда процессу не дают дышать
Симптом:
Приложение падает с ошибкой, а ты смотришь вроде ресурсов полно.
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
BY LinuxCamp | DevOps

Share with your friend now:
tgoop.com/linuxcamp_tg/510
