Как узнать текущее значение максимального количества одновременно открытых файлов в Linux?

«Как узнать текущее значение максимального количества одновременно открытых файлов в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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).