나는 컴퓨터에서 여러 개의 Java 프로세스를 실행하고 있으며 열린 파일 수와 해당 파일 유형을 정확하게 계산하고 싶습니다.
첫째, 달리기에는 sudo lsof
시간이 오래 걸린다.
[user@host]:~$ time sudo lsof > lsof.txt
real 1m5.920s
user 0m27.152s
sys 0m38.100s
Java 프로세스에서 열린 파일 수를 확인하십시오.
[user@host]:~$ grep -e "^java" lsof.txt -c
2565341
이는 비정상적으로 높은 수치입니다.
lsof
플래그로 출력을 필터링하여 동일한 숫자를 얻으 려고 하면 -c
완전히 다른 대답을 얻게 되며 lsof
첫 번째 명령에 비해 시간이 거의 걸리지 않습니다.
[user@host]:~$ time sudo lsof -c java | wc -l
4465
real 0m0.139s
user 0m0.052s
sys 0m0.068s
답변1
속도가 일관되지 않는 이유는 소켓도 파일이고 NFS에서 stat() 수행과 같은 기타 네트워크 관련 작업이기 때문입니다. lsof -b
이를 실행하여 이러한 작업을 건너 뛸 수 있습니다 .
행 수의 차이는 결과를 직접 확인해야 합니다. 때로는 결과를 정렬한 다음 비교하는 것이 도움이 됩니다.
sort lsof.txt > lsof-full-sorted.txt
diff lsof-full-sorted.txt lsof-filtered-sorted.txt
(내 예에서는 lsof-filtered-sorted.txt가 출력을 나타냅니다 lsof -c java|sort
)
또한 Midnight Commander에는 diff 출력보다 읽기 쉬운 멋진 diff 기반 파일 비교 기능이 있습니다.