어떤 프로세스가 너무 많은 열린 파일을 유지하고 있는지 확인할 수 있도록 각 프로세스와 해당 프로세스가 열려 있는 파일 설명자 수를 나열해야 합니다. 아니요, 다른 질문에서 요구한 것처럼 프로세스에 대해 열린 파일 수만 필요한 것은 아닙니다. 실행 중인 각 프로세스의 수를 내림차순으로 알아야 합니다.
lsof는 이것을 할 수 없는 것 같습니다. 이 작업을 수행할 수 있는 다른 유틸리티나 장치가 있습니까?
답변1
나는 다음과 같은 일을 할 것입니다 :
sudo lsof -FKc |
awk '
function process() {
if (pid || tid) {
print n, \
tid ? tid " (thread of " pid ": " pname")" : pid, \
name
n = tid = 0
}
}
{value = substr($0, 2)}
/^p/ {
process()
pid = value
next
}
/^K/ {
tid = value
next
}
/^c/ {
name = value
if (!tid)
pname = value
next
}
/^f/ {n++}
END {process()}' | sort -rn
공개 수량의 경우문서, 열린 수로 /^f/
대체 됩니다./^f[0-9]/
파일 설명자.
답변2
이는 적어도 Solaris 및 Linux에서 작동하며 아마도 /proc
파일 시스템을 지원하는 대부분의 다른 운영 체제에서도 작동합니다.
#!/bin/sh
cd /proc
echo " count pid"
ls -d [1-9]*/fd/* 2>/dev/null | sed 's/\/fd.*$//' | uniq -c | sort -rn
Linux나 다른 운영 체제에서는 대신 GNU를 사용하십시오 -rg
.-rn
sort