繁体   English   中英

Java无法创建新进程:打开文件错误过多

[英]Java cannot create new process: too many open file error

我正在使用以下命令在Java中启动太多进程:

       Runtime.getRuntime().exec("java -ja myJar.jar")

当达到约350个进程时,我得到一个IO异常:

 Cannot run program "java": java.io.IOException: error=24, Too many open files
 Exception in creating process
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:475)
    at java.lang.Runtime.exec(Runtime.java:610)
    at java.lang.Runtime.exec(Runtime.java:448)
    at java.lang.Runtime.exec(Runtime.java:345)

在每个过程中,我都使用一个数据库连接。 我正在运行ubuntu 32位操作系统。 但是当我跑步时:

   ulimit -u 

我可以看到流程限制是无限的。 可能是什么问题呢?

问题是您打开的文件太多,正在运行的进程没有太多。 要检查文件限制,请执行以下操作:

ulimit -n

通常为1024。

检查http://www.puschitz.com/TuningLinuxForOracle.shtml并搜索ulimit以获取有关更改此限制的良好说明。

所有系统都有其限制-听起来您已达到系统的限制。

在linux中,创建新进程会消耗大量inode (例如Windows handles ),这很像文件句柄。 唯一的解决方法是通过内核设置分配更多资源(我不知道该如何使用)。

您是否考虑过改用大量Java Threads 它们将消耗更少的系统资源。

运行350个JVM实例不是正常方法。 您可以在同一JVM中重新设计并运行350个“主线程”吗? 这就是servlet容器的工作方式。 所有Web应用程序都在同一JVM中运行。

PD。 ulimit手册页说,看看最大。 打开的文件是ulimit -n。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM