我继承了一些代码:
Process p = new ProcessBuilder("/bin/chmod", "777", path).start();
p.waitFor();
基本上,有一些古老的、高度基于巫术的原因,将键/值对作为文件存储在磁盘上。我不想深入讨论。
然而,我却遇到了一堆IO异常:
Exception :Cannot run program "/bin/chmod": java.io.IOException: error=24, Too many open files
Message: Cannot run program "/bin/chmod": java.io.IOException: error=24, Too many open files
当我说一堆时,我指的是10k到数百万个。
我感觉waitFor调用是为了防止这些异常的发生,等待进程完成并退出,但是我认为chmod在文件实际关闭之前就返回了结果。有人知道这是否会导致这些异常吗?
我另一个想法是,在Java端打开和关闭成千上万个文件不够快,可能还有其他问题,比如在fw.close()被调用时某种形式的文件缓冲区没有被清除。
我对Java相当新手,这个问题让我困惑不解。 (幸运的是,该应用程序仍然可以运行..尽管输出了一个非常大的日志文件)
还有其他方法可以解决这个问题吗,例如清除缓冲区或将文件打开限制增加到JVM可以跟上自己的速度(假设这是问题所在)?