lsof 出力の不一致 [閉じる]

lsof 出力の不一致 [閉じる]

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

関連情報