web-dev-qa-db-ja.com

lsofが多すぎるとプロトコルを識別できません


Javaプロセス/アプリがあります。/usr/sbin/lsof-pをそのJavaプロセスで実行すると、多くの「プロトコルを識別できません」。また興味深いことに、ファイル記述子(FD)は非常に安定した速度で増加しています。作成中のFDには「プロトコルを識別できない」という記述があります。

したがって、Javaプロセスをインストルメント化/プロファイルして、その数のFDを作成しているユーザーを特定する方法はありますか?ツールに関する詳細な説明は非常に役立ちます。

簡単なグーグル検索で、straceは1つの方法ですがIIUCであるとわかります。これは、JavaプロセスからのLinuxシステムコールが表示されることを示します。私のJavaコードは、生成されているシステムコールよりも適切に動作しません。

繰り返しますが、どんなアイデア/提案も単に素晴らしいでしょう!

23
Johnny

Lsofプリントcan't identify protocolハーフオープンTCP/IP接続の場合: https://idea.popcount.org/2012-12-09-lsof-cant-identify-protocol/

14
Marek

Lsofが「プロトコルを識別できません」と表示する場合、これは通常、ソケットに関連しています(関連する出力行で「sock」とも言う必要があります)。

したがって、コードのどこかにソケットを接続していて、それらを適切に閉じていない可能性があります(おそらく、finallyブロックが必要です)。

Lsofを並べて実行しながら、デバッガー(IDEを使用するのが最も簡単で、必要に応じてリモートデバッガーを使用することもできます)でコードをステップ実行することをお勧めします。最終的に、どのスレッド/コード行がこれらのファイル記述子を作成しているかを確認できるはずです。

Lsof出力の詳細については、 このFAQ のポイント10.2.2を参照してください。

8
laher

SSLとホスト名を使用すると、JVM 1.6で接続リークのバグが発生する可能性があります。 http://bugs.Sun.com/view_bug.do?bug_id=6745052

1
Michał Niklas