您的位置:首页 > 运维架构 > Linux

linux文件打开过多的问题 too many openfiles

2018-01-16 11:22 471 查看
将scala项目打包到linux上部署运行的时间,遇到了服务启动没多长时间就停止的问题,后来查看log发现问题是 Too many openfiles ,一查发现,全是清一色的答案,如http://blog.csdn.net/fdipzone/article/details/34588803的答案,但这并不能从根本上解决问题,只是饮鸩止渴。

后来自己分析代码,检查log,发现一个客户端的配置文件反复被加载,用lsof -p <你服务pid>(pid 通过ps -ef|grep <部署jar>)命令查看所有打开的文件,发现配置文件被反复加载多次,后来直接将配置文件的参数写在了代码中,解决了这个问题。

当然,还有后续,解决问题之后不久,文件数再次达到最大上线,再次用lsof -p <pid>查看所有的文件打开进程,发现

java    18660 root   72r     FIFO                0,8       0t0  11797288 pipe

java    18660 root   73w     FIFO                0,8       0t0  11797288 pipe

java    18660 root   74u  a_inode                0,9         0      5832 [eventpoll]

这三个出现的次数最多,最大文件数上线是4096,几乎3900多个都是这两个,仔细研读代码,发现,自己代码中有个查询的客户端,每次客户端查询报错的时候,都是直接跳出,不会关闭客户端,从而导致pipe过多,后来,加了try catch 在finally中加上shutdown保证每次查询不管正确与否都能关闭,最后解决了这个问题

too many files这个问题前前后后困扰了我两个星期,到此,终于圆满解决
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: