`

java.io.IOException: Too many open files异常的解决

    博客分类:
  • java
阅读更多
在Java程序中使用Runtime.exec("  ")调用外部程序,得到ErrorStream和InputStream进行处理。
在使用一段时间之后,程序会报“打开文件数过多”的问题。
debug过程:
linux限制了一个程序打开的最大文件数,明显应该是超过了限制,这时有两种方法:
(1)重新设置最大打开文件数(Linux下使用ulimit);
  (2)  检查程序本身存在的可能问题。
使用第一种在大多数情况下是治标不治本的,如果程序本身存在问题,比如使用了socket而没有关闭,那么会打开一个socket就占用一个file descriptor,随着时间的增长终会超出限制,并且存在隐患。
所以最好是先检查程序的问题。
Process process=Runtime.exec("  ");
process一般都是正常终止,本来以为process终止之后会自动释放资源,但是经过测试发现是没有的,如果程序一直执行Runtime.exec(),那么占用的file descriptor会不断增加,如果在程序中加入process.destroy(),则可以释放占用的file descriptor。

至于其他的由socket,或者调用其他外部命令产生的问题,我想首先还是从程序本身找原因,如果程序没有错误--比如它一下就需要创建很多进程或线程,同时打开了多个描述符,那么再调整系统参数--“打开的最大文件数”也不迟。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics