どのプロセスがあまりにも多くのオープンファイルを保持しているかを確認できるように、各プロセスとそのプロセスが開いているファイル記述子の数をリストする必要があります。いいえ、他の質問で要求されたように、プロセスに対して開かれたファイルの数だけが必要ではありません。実行中の各プロセスの数を降順に知っておく必要があります。
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