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

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

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

解决方案:

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

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

但是这种方法无法从根本上查出什么原因导致java打开了这么多的文件

2. java端调查开启文件多的原因

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

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

通过调查发现,java开了很多TYPE为FIFO(Linux中的管道)的文件,因此联想到有可能是java代码中的流没有正常关闭或者释放导致的。

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

image
啊啦那一卡
我要名正言顺闯进你生活,干预你原本的生活,吃我不曾敢食的醋,做我这身份该做的事情--拥抱你。
4
发布数
1
关注者
2722
累计阅读

热门教程文档

爬虫
6小节
Typescript
31小节
Javascript
24小节
Vue
25小节
Maven
5小节
广告