Ответ
В Linux есть два основных лимита: системный (для всей ОС) и пользовательский/процессный (для сессии или конкретного процесса). Вот как я их проверяю.
1. Лимит для текущей оболочки (сессии пользователя):
ulimit -n
Эта команда показывает мягкий лимит (soft limit) — текущее максимальное число дескрипторов, которое могут использовать процессы в этой сессии.
2. Лимиты для конкретного запущенного процесса:
# 1. Найти PID процесса (например, nginx)
pidof nginx
# 2. Посмотреть его лимиты
cat /proc/<PID>/limits | grep "Max open files"
В выводе будет две строки: Soft Limit (текущий) и Hard Limit (максимальный, до которого может быть повышен soft limit).
3. Абсолютный системный максимум: Это максимальное число файловых дескрипторов, которое может выделить ядро для всей системы.
cat /proc/sys/fs/file-max
4. Проверка текущего использования системой: Чтобы понять, насколько мы близки к лимиту, смотрю количество выделенных дескрипторов:
cat /proc/sys/fs/file-nr
Вывод три числа: выделенные неиспользуемые дескрипторы, выделенные используемые дескрипторы, и системный максимум (file-max).
Контекст для DevOps: Проблемы с лимитами открытых файлов часто возникают у высоконагруженных сервисов (веб-серверы, базы данных, прокси). В конфигурации сервисов (например, systemd для nginx.service) я явно увеличиваю LimitNOFILE. В мониторинг добавляю алерт на высокое использование дескрипторов (метрика node_filefd_allocated из node_exporter).