すべてのプロセスと、そのプロセスに対して開いているファイル記述子の数を一覧表示して、開いているファイルの数が多すぎるプロセスを特定できるようにする必要があります。いいえ、他の質問のように1つのプロセスだけで開いているファイルの数は必要ありません。実行中のすべてのプロセスの数を知る必要があります。降順で並べ替えることをお勧めします。
lsofはこれができるようには見えません。これを達成できる他のユーティリティまたは何かがありますか?
私は次のようなことをします:
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]/
に置き換えます。ファイル記述子。
これは、少なくともSolarisおよびLinuxで、おそらく/proc
ファイルシステムをサポートする他のほとんどのOSで動作します。
#!/bin/sh
cd /proc
echo " count pid"
ls -d [1-9]*/fd/* 2>/dev/null | sed 's/\/fd.*$//' | uniq -c | sort -rn
Linuxまたは他のOSでは、GNU sort
を使用して、-rg
ではなく-rn
を使用してください。