프로세스별로 Unix의 모든 프로세스에 대해 열린 파일 설명자 수를 나열하는 방법은 무엇입니까?

프로세스별로 Unix의 모든 프로세스에 대해 열린 파일 설명자 수를 나열하는 방법은 무엇입니까?

어떤 프로세스가 너무 많은 열린 파일을 유지하고 있는지 확인할 수 있도록 각 프로세스와 해당 프로세스가 열려 있는 파일 설명자 수를 나열해야 합니다. 아니요, 다른 질문에서 요구한 것처럼 프로세스에 대해 열린 파일 수만 필요한 것은 아닙니다. 실행 중인 각 프로세스의 수를 내림차순으로 알아야 합니다.

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.-rnsort

관련 정보