在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,或者调用其他外部命令产生的问题,我想首先还是从程序本身找原因,如果程序没有错误--比如它一下就需要创建很多进程或线程,同时打开了多个描述符,那么再调整系统参数--“打开的最大文件数”也不迟。
分享到:
相关推荐
解决删除目录提示:System.IO.IOException: 目录不是空的
java.security.InvalidKeyException:illegal Key Size 微信开发过程中,JDK6的版本
把 java 代码直接改成 jsp,上传时产生 如下异常: 2012-12-31 8:59:21 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet jsp threw exception java.io.IOException: ...
针对java.io.IOException: entity content is too long [180278508] for the configured buffer limit [157286400]异常,将 DEFAULT_BUFFER_LIMIT修改为150M
Eclipse 进行 ANT 时错误 Javadoc failed java.io.IOException Cannot run program javadoc
本人的一片博客,http://blog.csdn.net/jackieriver/article/details/78882194,所需要的一些插件
it.sauronsoftware.jave.EncoderException: java.io.IOException: Cannot run program "C:\Users\moxiao\AppData\Local\Temp\jave-1\ffmpeg.exe": CreateProcess error=740, 请求的操作需要提升。 在最新的liunx ...
复制并覆盖%JAVA_HOME%/jre/lib/security下的local_policy.jar 和 US_export_policy.jar
java.io.IOException: Server returned HTTP response code: 403 for URL 处理过程记录 BASIC AUTH2 POST接口,解决403问题
Http-Multipart-Data-Parser-master,如需要http post接口开发、http post传文件等操作可以参考,源码的最原始地址忘记了,这个是从上面down下来新版,各位可参考
Java.io.IOException: The same input jar [E:\Android\myProgram\angel\libs\alipaySdk-20160825.jar] is specified twice. 首先 看一下我项目中关于此jar的配置,我在libs中导入了alipaySdk-20160825.jar,
Android Build 时报错: java.io.IOException: Could not parse XML from android/accounts/annotati...Android构建时报错: app:lintVitalRelease[Fatal Error] :3:214: 与元素类型 “item” 相关联的 “name” ...
报错:java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.-附件资源
android 二进制xml 解析。AXMLPrinter2反编译的时候报错解决
java安装路径Java\jre\lib\security下替换这两个架包,即可解决 java.security.cert.CertificateException: Unable to initialize, java.io.IOException: Short read of DER length
JSSE(Java Security Socket Extension) 是Sun为了解决在Internet上的实现安全信息传输的解决方案。它实现了SSL和TSL(传输层安全)协议。在JSSE中包含了数据加密,服务器验证,消息完整性和客户端验证等技术。通过...
java.io.IOException: Too many open file、java.lang.OutOfMemoryError报错处理方法
我在进行MapReduce本地测试的时候,遇见下面的报错: ...解决方法:①第一步:在项目工程中加入NativelO.java,注意包名必须与源码中一致 ②第二步:将access方法的返回值改为true,不让他去调用access0() 类似
生成证书的全部步骤的bat文件 博文链接:https://davidhhs.iteye.com/blog/2279674