私はコンピュータ上で複数の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ベースのファイル比較機能があります。