我正在使用第三方商业库,这似乎是泄漏文件句柄(我在Linux上验证了这一点lsof).最终服务器(Tomcat)开始得到臭名昭着的"太多打开文件错误",我必须重新启动JVM.
我已经联系了供应商.然而,与此同时,我想找到一个解决方法.我无权访问他们的源代码.有什么办法,在Java中,清理文件句柄,而不具有原始访问File对象(或者FileWriter,FileOutputStream等)?
您可以在启动时打开一堆文件并使用它File*putStream.getFD()来获取一堆java.io.FileDescriptors,然后关闭它们,但保留描述符。稍后您可能可以使用这些存储的创建流FileDescriptor并关闭它们。
我还没有对此进行测试,因此如果它在某些平台上不起作用,我也不会感到惊讶。