Почему lsof сообщает о большем количестве открытых файлов, чем вывод ulimit "open file"
Tomcat работает на моей рабочей станции в течение нескольких дней, теперь он не отвечает, команда lsof выводит множество соединений с состоянием close_wait, pid tomcat - 25422, однако команда ulimit показывает, что "open file" - 1024, как это может произойти?
[root@localhost home]# lsof -p 25422 | wc -l
10309
[root@localhost home]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 399360
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 399360
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
3 ответа
Не каждый тип записи в lso учитывается при определении ulimit. RU Выполните следующую команду, чтобы получить только те файлы, которые учитываются в ulimit
lsof -p <pid> -d '^cwd,^err,^ltx,^mem,^mmap,^pd,^rtd,^txt' -a
Для открытых файлов у нас есть ограничение на количество открытых / мягких файлов в ОС Linux.
Если мягкий предел достигнут, он просто расширит предел до более высокого, но под жестким пределом.
Проверяя жесткий лимит, вы можете просто запустить:
# ulimit -Hn
Вот также статья, которая может помочь вам понять больше:
Руководство по limit.conf / ulimit / открыть файловые дескрипторы под linux
- Lsof Options на странице руководства Linux описывает команду следующим образом:
При отсутствии каких-либо опций lsof выводит список всех открытых файлов, принадлежащих всем активным процессам.
Ulimit просто ограничивает ресурсы на уровне пользователя и применяется к каждому процессу. Вот почему вы видите, что число в отчете Lsof намного больше, чем число ulimit.
Если вы хотите получить ограничения на уровне ядра, используйте следующую команду
cat /proc/sys/fs/file-max
Вы получите очень большое число.
Таким образом, lsof может быть больше, чем ulimit, и определенно меньше, чем file-max.