解决java.io.IOException: Too many open files报错问题
周一来了之后发现 某个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错误。