lsof
はUnix用の素晴らしいツールで、現在開いているファイルハンドルをすべて表示します。lsof JVMの対応ですか?
実行中のJVM内のすべての開いているファイルを表示する同様のツールを知っている人はいますか(JVMTIまたはそれに類するインターフェース経由)。
この特定のケースでは、どのクラスがハンドルを開いているかを知るだけで十分です。メソッド/行、あるいはGC root全体のチェーンさえも素晴らしいだろうが、ハンドラのオーナークラスは既に良いスタートだ。
私はヒープダンプを作成してプロファイラで開き、これを見つけることができると知っていますが、これは特に大きなヒープでは面倒な作業です。
より良いプロファイラを使用することをお勧めします。 ;)YourKitでは、アプリケーションの実行中に開いているファイルをすべて見ることができます。 –
私はYourKitを使用しますが、実際の環境ではプロファイリングを有効にすることはめったにありません。また、YourKitはダンプからのファイルハンドルの表示をサポートしていますか? – mindas
開いているすべてのファイルに使用されているクラスで検索して、ダンプからFileDescriptorを表示することをサポートしています。どのファイルへの参照が保持されているかを確認できます。 –