Назад | Перейти на главную страницу

Каковы шаги, чтобы отследить проблему "слишком много открытых файлов"

Я пытаюсь отследить и устранить проблему "слишком много открытых файлов" в RHEL 7.

Из Google, если я запустил эту команду, он даст мне количество открытых файлов в первом столбце и PID во втором столбце.

$ lsof | awk '{print $2}' | sort | uniq -c | sort -n
   ...
   6300 20779
  31417 21703
  32319 21399
*1439165 21459*

Но затем, если я попытаюсь подсчитать количество открытых файлов для PID 21459, я получу гораздо меньшее число (1,4 млн против 5,8 тыс.) - Почему есть разница и что правильно?

$ lsof -p 21459 | wc -l
5876

Затем я могу получить дополнительную информацию о PID 21459, который является Apache NiFi.

$ ps -Flww -p 21459
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN    RSS PSR STIME TTY          TIME CMD
0 S root      21459  20779 99  80   0 - 22255308 futex_ 61812044 26 10:37 ?   1-08:40:36 java -classpath /opt/nifi/nifi-1.9.2/./conf:/opt/nifi/nifi-1.9.2/./lib/jul-to-slf4j-1.7.25.jar:/opt/nifi/nifi-1.9.2/./lib/jcl-over-slf4j-1.7.25.jar:/opt/nifi/nifi-1.9.2/./lib/jetty-schemas-3.1.jar:/opt/nifi/nifi-1.9.2/./lib/javax.servlet-api-3.1.0.jar:/opt/nifi/nifi-1.9.2/./lib/slf4j-api-1.7.25.jar:/opt/nifi/nifi-1.9.2/./lib/logback-classic-1.2.3.jar:/opt/nifi/nifi-1.9.2/./lib/nifi-properties-1.9.2.jar:/opt/nifi/nifi-1.9.2/./lib/nifi-runtime-1.9.2.jar:/opt/nifi/nifi-1.9.2/./lib/nifi-framework-api-1.9.2.jar:/opt/nifi/nifi-1.9.2/./lib/logback-core-1.2.3.jar:/opt/nifi/nifi-1.9.2/./lib/nifi-nar-utils-1.9.2.jar:/opt/nifi/nifi-1.9.2/./lib/nifi-api-1.9.2.jar:/opt/nifi/nifi-1.9.2/./lib/log4j-over-slf4j-1.7.25.jar -Dorg.apache.jasper.compiler.disablejsr199=true -Xmx64g -Xms16g -Djavax.security.auth.useSubjectCredsOnly=true -Djava.security.egd=file:/dev/urandom -Dsun.net.http.allowRestrictedHeaders=true -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -XX:+UseG1GC -Djava.protocol.handler.pkgs=sun.net.www.protocol -Dnifi.properties.file.path=/opt/nifi/nifi-1.9.2/./conf/nifi.properties -Dnifi.bootstrap.listen.port=39005 -Dapp=NiFi -Dorg.apache.nifi.bootstrap.config.log.dir=/opt/nifi/nifi-1.9.2/logs org.apache.nifi.NiFi

Если я запустил команду ниже, она покажет 3079 файловых дескрипторов.

$ ll /proc/21459/fd | wc -l
3079
$ ll /proc/21459/fd
lr-x------ 1 root root 64 Jul 26 15:27 609 -> /opt/nifi/nifi-1.9.2/work/nar/extensions/nifi-email-nar-1.9.2.nar-unpacked/NAR-INF/bundled-dependencies/poi
lrwx------ 1 root root 64 Jul 26 15:27 61 -> socket:[98493]
lr-x------ 1 root root 64 Jul 26 15:27 610 -> /opt/nifi/nifi-1.9.2/work/nar/extensions/nifi-email-nar-1.9.2.nar-unpacked/NAR-INF/bundled-dependencies/poi
lr-x------ 1 root root 64 Jul 26 15:27 611 -> /opt/nifi/nifi-1.9.2/work/nar/extensions/nifi-email-nar-1.9.2.nar-unpacked/NAR-INF/bundled-dependencies/spr
lr-x------ 1 root root 64 Jul 26 15:27 612 -> /opt/nifi/nifi-1.9.2/work/nar/extensions/nifi-email-nar-1.9.2.nar-unpacked/NAR-INF/bundled-dependencies/spr
lr-x------ 1 root root 64 Jul 26 15:27 613 -> /opt/nifi/nifi-1.9.2/work/nar/extensions/nifi-email-nar-1.9.2.nar-unpacked/NAR-INF/bundled-dependencies/spr
lr-x------ 1 root root 64 Jul 26 15:27 614 -> /opt/nifi/nifi-1.9.2/work/nar/extensions/nifi-email-nar-1.9.2.nar-unpacked/NAR-INF/bundled-dependencies/spr

Заметка цвета на этом отпечатке указывают на проблему?

58 (red text)   -> socket:[111898] (white text, red bg)
610 (blue text) -> /opt/nifi/somefile.jar (red text, black bg)
...etc...

вывод ll proc / pid / fd

Что еще я могу сделать, чтобы выяснить причину всех открытых файлов? Как я могу активно отслеживать количество открытых файлов для процесса? (просто продолжай бежать lsof?) Как узнать, проблема ли это в приложении или в конфигурации сервера?