【发布时间】:2023-08-25 12:17:01
【问题描述】:
我继承了一些代码:
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 可以跟上自身的东西(假设是问题所在)
【问题讨论】:
-
您的目标操作系统(和版本)是什么。看到这个:unix.derkeiler.com/Newsgroups/comp.unix.solaris/2007-02/…
-
debian,好像被uname清除了。将是最新的稳定版。
标签: java java-io processbuilder