Почему 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

  1. Lsof Options на странице руководства Linux описывает команду следующим образом:

При отсутствии каких-либо опций lsof выводит список всех открытых файлов, принадлежащих всем активным процессам.

введите описание ссылки здесь

  1. Ulimit просто ограничивает ресурсы на уровне пользователя и применяется к каждому процессу. Вот почему вы видите, что число в отчете Lsof намного больше, чем число ulimit.

  2. Если вы хотите получить ограничения на уровне ядра, используйте следующую команду

      cat /proc/sys/fs/file-max

Вы получите очень большое число.

Таким образом, lsof может быть больше, чем ulimit, и определенно меньше, чем file-max.

Другие вопросы по тегам