3

ファイル記述子の増加に苦しむプログラムがあります。コマンド ls -l /proc/5969/fd を実行すると、5969 が Java プログラムの pid であり、ファイル記述子の数が増え続けていることがわかります。しかし、これらのファイル記述子の 1 つを開いて、開いたままになっているファイルを確認することはできません。リストの例を次に示します。

lrwx------ 1 root root 64 oct 24 16:08 52295 -> socket:[2577706264]
lrwx------ 1 root root 64 oct 24 16:08 52296 -> socket:[2579543392]
lrwx------ 1 root root 64 oct 24 16:08 52297 -> socket:[2578760962]

どのファイルが開いたままであるかを知ることで、このファイル記述子のリークを解決し、ファイル記述子の数を増やす方法を見つけるのを手伝ってください。

4

2 に答える 2

5

試す

# lsof -p <pid>

プロセスIDで開いているすべての「ファイル」が一覧表示され、ソケットがバインドされているIP/ポートが表示される場合があります。プログラムがクライアント側の場合、TCP RSTによって切断され、ファイル記述子が適切にクリーンアップされていない可能性があります。

于 2010-12-18T01:35:10.793 に答える
5

さて、簡単な観察から、ファイルではなくソケットでファイル記述子を使用しています

UNIX では、ファイルとソケットの両方がファイル記述子を使用するため、開いたソケットを閉じないという問題があります。

その結果、ファイルを開いたままにするのではなく、実際にはポート番号を他のプログラムが使用できないようにロックしたままにします。

于 2010-10-24T22:15:29.263 に答える