任何Java调试技巧,用于查找"打开太多文件"的原因

Nik*_*ris 5 java debugging stream filenotfoundexception

我正在开发一个Linux环境,系统打算长时间连续运行.经过一夜的测试后,我们看到FileNotFoundException,并显示"Too Many Files Open"消息.我们开始在系统中的不同时间记录lsof命令的输出,看看我们是否能看到发生了什么.我们注意到许多未命名的管道已经打开.所以我认为这些是由于文件流没有关闭.我在源代码中搜索了所使用的任何*Stream对象,并确保它们都在finally {}块中关闭.是否有任何其他我可以搜索的Java对象类型,我可能没有关闭,这会导致所有这些未命名的管道被打开?

另外,我的ulimit是1024,我还搜索了*Writer,并确保这些都关闭了.

NPE*_*NPE 2

YourKit可能值得一看。它的探针旨在帮助解决此类问题,尽管我自己从未有机会尝试该功能。