Linux下java报错Too many open files的解决方法

最近发现运行在Linux下的java application报以下错误:java

java.io.IOException: Cannot run program "/bin/sh": java.io.IOException: error=24, Too many open files
Caused by: java.io.IOException: java.io.IOException: error=24, Too many open files
        at java.lang.UNIXProcess.<init>(Unknown Source)
        at java.lang.ProcessImpl.start(Unknown Source)
        ... 5 more

解决方案:linux

 

1. 提升linux中默认同时打开的最大文件数量(默认是1024)bash

最便捷的方法是在/etc/profile文件中加入ulimit -n 最大开启数量app

可是这种方法没法从根本上查出什么缘由致使java打开了这么多的文件code

2. java端调查开启文件多的缘由进程

 Linux下查看进程打开了哪些文件it

 lsof -p  进程id    ->  打开的具体文件
 lsof -p  进程id|wc -l   ->  打开文件的数量io

 

经过调查发现,java开了不少TYPE为FIFO(Linux中的管道)的文件,所以联想到有多是java代码中的流没有正常关闭或者释放致使的。class

并且Java在Linux下执行命令的时候须要用到Process类,这个类在使用后须要destroy()掉,否者也会致使文件数开启的过多sed

相关文章
相关标签/搜索