linux系統中執行java程序的時候,如果打開文件超過了限制,就會報錯:
java.io.IOException: error=24, Too many open files
解決辦法:
首先查看java程序的進程究竟打開了多少文件
這個java程序以tomcat爲例
ps -ef | grep tomcat
獲取到TomcatPid
再通過:
lsof -p TomcatPid | wc -l
獲取到打開的全部文件數
得到文件數後,再查看系統的限制是多少
ulimit -a
....
open file (-n) 1024
....
和剛纔查出來的數對比果然超了。
臨時修改limit限制數
ulimit -n 4096 #後面的數字是2的N次方,而且這條命令必須是root執行,如果其他用戶執行會報錯,提示沒有權限
但是這個命令也僅僅臨時生效,推出終端後,就失效了
建議永久修改:
echo "* soft nofile 4096" >> /etc/security/limits.conf
echo "* hard nofile 4096" >> /etc/security/limits.conf
執行完成後,確保下真的加到文件中了
cat /etc/security/limits.conf
在最後如果有的話,就沒問題
執行su -
假裝推出在登陸,查看ulimit -a確定open file 的限制確實已經修改
確認沒問題後,重啓tomcat,再次查看是否還會出現too many open file 的問題