
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...
열려 있는 모든 파일의 원인을 추적하려면 또 어떻게 해야 합니까? 프로세스에 대해 열려 있는 파일 수를 어떻게 적극적으로 모니터링할 수 있습니까? (그냥 계속 실행하세요 lsof
?) 애플리케이션 문제인지 서버 구성 문제인지 어떻게 알 수 있나요?