# Для уже работающего процесса:
cat /proc/<PID>/limits | grep "open files"
# Или найти PID по имени:
pid=$(pgrep -f <имя_процесса>)
cat /proc/$pid/limits
ulimit -n # Текущая оболочка
ulimit -n -H # Жесткий лимит
sysctl fs.file-max # Общий системный лимит
lsof -n | awk '{print $2}' | sort | uniq -c | sort -nr | head
ls -l /proc/<PID>/fd | wc -l # Количество открытых файлов
lsof -p <PID> # Детальный список
lsof -p <PID> | awk '{print $5}' | sort | uniq -c # Группировка по типам
systemctl show <сервис> | grep LimitNOFILE
lsof -p <PID> | awk '{print $5}' | sort | uniq -c | sort -nr
Типичные проблемы:
strace -f -e trace=open,openat,close -p <PID> 2>&1 | grep -v ENOENT
sysctl -a | grep file
cat /proc/sys/fs/file-nr
Ключевые параметры:
fs.file-max
- максимальное число файлов в системеfs.nr_open
- максимальное число файлов на процессulimit -n 65536
Добавить в /etc/security/limits.conf
:
<user> soft nofile 65536
<user> hard nofile 65536
Для systemd сервисов:
[Service]
LimitNOFILE=65536
Диагностика:
/proc/<PID>/limits
)lsof -p <PID>
)strace
)Решение:
Профилактика:
Проблема "Too many open files" часто указывает либо на утечку ресурсов в приложении, либо на неадекватно настроенные лимиты для рабочей нагрузки.