23


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

それで、誰が多くのFDを作成しているかを突き止めるために、Javaプロセスを計測/プロファイルする方法はありますか。ツールに関する詳細な説明は、本当に役に立ちます。

Google で簡単に検索すると、strace は 1 つの方法ですが、IIUC では Java プロセスからの Linux システム コールが表示されます。どのシステム コールが生成されているかよりも、Java コードのどの部分の動作が悪いかということに関心があります。

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

4

3 に答える 3

16

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

于 2012-12-09T17:35:14.903 に答える
8

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

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

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

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

于 2011-10-27T06:14:31.333 に答える
1

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

于 2012-04-04T05:51:52.483 に答える