周一來了之后發現 某個jar包服務報錯 一直提示
java.io.IOException: Too many open files
意思是文件句柄打開超過限制,導致服務不可用
查看了下 系統默認的是
百度上很多文章都說是因為系統默認的是1024太小所致,修改
/etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
修改完成保存,重啟服務器
但系統已經非常大了,而程序實際打開的也不過4632
而查看服務所打開的 也不過4000多
lsof -p 21667 |wc -l
4632
所以問題不在這
后來百度了文章說道可能是程序自己限制了
然后我查看了下
cat /proc/21667/limits
果然程序默認最大能打開的文件句柄是4096 報錯原因找到了 ,通過修改該文件的配置解決本次問題。
但這不是根本解決問題,根本問題應該是開發寫代碼的時候往往就會粗心的忘記對Connection、Session、Socket、節點流和處理流等進行關閉操作,而linux下對文件操作數量有限制,當超過默認的最大打開文件數量時,就會報Too many open files錯誤。
