'열린 파일이 너무 많음' 문제를 추적하는 단계는 무엇입니까?

'열린 파일이 너무 많음' 문제를 추적하는 단계는 무엇입니까?

RHEL 7에서 '너무 많은 파일이 열려 있음' 문제를 추적하고 근본 원인을 찾으려고 합니다.

인터넷 검색을 통해 이 명령을 실행하면 첫 번째 열에 열린 파일 수가 표시되고 두 번째 열에 PID가 표시됩니다.

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

그러나 PID 21459에 대해 열려 있는 파일 수를 계산하려고 하면 훨씬 작은 숫자(1.4M 대 5.8k)를 얻습니다. 차이점이 있는 이유와 올바른 것은 무엇입니까?

$ lsof -p 21459 | wc -l
5876

그러면 Apache NiFi인 PID 21459에 대한 추가 정보를 얻을 수 있습니다.

$ 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?) 애플리케이션 문제인지 서버 구성 문제인지 어떻게 알 수 있나요?

관련 정보