コードベースにファイルハンドルやストリームが正しく閉じられていないという問題があります。私たちは最終的に非常に重い負荷の下でTooManyOpenFiles例外を取得します。 lsofの出力に基づいて、私たちはロッキングシステムがどこにあるのかを知っていると確信していますが、私の質問は、リソースが正しく閉じられたことをチェックするユニットテストを書くにはどうすればいいですか?現在開いているファイルの数を調べるためにJREに問い合わせる方法はありますか?どういうわけかファイル操作を傍受して監視することはできますか?ファイルを適切に閉じていることを確認するJavaユニットテストの良いパターンは何ですか?
すべてのファイルI/Oを管理し、参照を数え、それらが閉じられていることを確認するためにコードを計測する必要があると思われますが、誰かがトップダウンソリューションを知っていれば上記のアイデアは、大きな助けになるでしょう!
私はJavaがバックグラウンドでそれをすべて実行していると信じています。うーん、多分私はそれを見逃しているかもしれません。 – Coffee
Javaは最終的にあなたの開いているファイルをガベージコレクションして閉じますが、リソースを非常に迅速に開いて捨てると、それは追いつかなくなります。ハンドルを明示的に閉じる方がはるかに優れています。 –