centos7,进程最大打开文件数 too many open files错误

Posted abkn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos7,进程最大打开文件数 too many open files错误相关的知识,希望对你有一定的参考价值。

遇到一问题,tomcat最近发生几次异常,查看日志,发现一直报 too many open files,熟悉的同学都知道这是用户打开文件数过多导致的,

再用命令ls /proc/20861/fd/ | wc -l 查看当前tomcat进程打开文件数,果然已经4095个,这种问题解决办法就是增大文件打开数即可,简单的很。

但如果能这么容易的解决了,我也就不用再写这篇博客了。因为我查了下当前用户所能打开的文件数发现最大能打开的文件数是65535,远远大于4096。

技术分享图片

 

而/etc/security/limits.conf里也都设置的是65535

技术分享图片

 

可为什么当前用户能打开65535个文件,而进程打开4095个文件后就超出限制了呢,就开始报 too many open files错误信息了呢。

一查看进程详细信息发现,原来该进程最大只能打开4096个文件。

 技术分享图片

 

此时赶紧上网百度了造成此问题的原因,只发现一条有用的信息,那就是说/etc/security/limits.conf限制实际取决于 /etc/security/limits.d/20-nproc.conf的配置,也就是说哪怕/etc/security/limits.conf设置最大打开数是65535,而/etc/security/limits.d/20-nproc.conf里配的是4096,那最终结果还是用户最大只能打开4096个文件句柄,于是赶紧看了下/etc/security/limits.d/20-nproc.conf配置,果然是4096,于是赶紧改成65535,然后重启应用,满怀欣喜的看下进程限制,结果还是4096,吐血中。。。

技术分享图片

 

后又思索了很久,查了很久的百度,依然没有头绪,只好写了个脚本监控日志,发现too many open files信息后就重启tomcat(我们冗余的,session也做了共享,重启不影响业务的)。

 

第二天过来再解决这个问题时,冥冥之中感觉是systemctl脚本问题,但仔仔细细看了脚本并没有什么问题,于是就瞎猫碰上死耗子的心态去看看其他systemctl脚本怎么写,结果这一看,不得了啊,居然把问题给解决了。

当前是看的是docket启动脚本,docket是yum安装的,那脚本里有如下这么俩句话,凭我老到经验一下就看出这是限制进程打开数的,如果我把这俩句加到tomcat启动脚本里,再重启应用,看进程限制,发现最大打开文件数终于改成功了。

写这篇博客,是希望帮助那些也遇到这个问题的人,免得像我一样百思不得其解,耽误时间。如果帮到你了,清评论一下,一是我想看看有多少人遇到这个问题了,为什么我当初去百度时没有一篇文章指明进程限制这个问题,二是有评论才有动力写下一个技术分享嘛,谢谢~

LimitNOFILE=1048576
LimitNPROC=1048576

 

技术分享图片

 

以上是关于centos7,进程最大打开文件数 too many open files错误的主要内容,如果未能解决你的问题,请参考以下文章

Mysql报Too many connections,不要乱用ulimit了,看看如何正确修改进程的最大文件数

linux 打开文件数 too many open files 解决方法

linux打开文件数 too many open files 解决办法

(转)linux 打开文件数 too many open files 解决方法

优化 Nginx worker 进程最大打开文件数

怎样查看linux进程打开的文件数