lsof 및 스레드 이해에 도움

lsof 및 스레드 이해에 도움

-p $PIDon 을 사용하면 lsof프로세스의 직접 스레드만 얻습니다. 스레드와 lsof를 효과적으로 사용하는 이유와 방법은 무엇입니까?

sudo lsof -p 5344 > lsof-p5344.log
sudo lsof | grep  '\<5344\>' > lsofgrep5344.log

$ wc -l lsof*5344.log
  1,120,208 lsofgrep5344.log
      2,166 lsof-p5344.log

이는 정확한 프로세스의 라인입니다. 이것은아니요자식 프로세스에 대해. 여기서는 awk출력 필드 2(lsof 출력의 두 번째 열)를 필터링하기 위해 정확히 프로세스 PID 번호를 사용하고 있습니다.

$ cat lsof-p5344.log  | awk '{print $2}' | grep '^5344$' | wc -l
2,165

$ cat lsofgrep5344.log  | awk '{print $2}' | grep '^5344$' | wc -l
1,120,207

이제 첫 번째 열 "COMMAND"로 필터링하면 Java 애플리케이션의 다른 스레드가 표시되고 하나는 lsof -p기본 스레드(예: "COMMAND=java_daemon")만 표시되는 반면 lsof | grep많은 스레드(예: " COMMAND=pool123)가 표시됩니다. "), JMX, Java2D, Quartz 등", 여기서 "PID"는 5344와 같음)

답변1

내 시스템에는 lsof -k스레드 번호가 표시됩니다. 하지만 리소스(파일, 메모리 맵...)가 전체 프로세스에 할당되고(한 스레드에서 열린 파일을 다른 스레드에서 사용할 수 있음) 스레드 마이닝이 관련성이 없는 것 같습니다.

내 Linux 시스템에서는 파일이 열리자마자 종료되는 스레드를 만듭니다. lsof파일을 연 스레드가 더 이상 존재하지 않는 동안에도 파일 보기는 계속됩니다.

관련 정보