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

相關文章
相關標籤/搜索