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

原文地址:https://www.cnblogs.com/abkn/p/9267722.html

时间: 2024-08-18 09:06:04

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

修改用户进程可打开文件数限制(转)

1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量 的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄).可使用ulimit命令查看系统允许 当前用户进程打开的文件数限制: [[email protected] ~]$ ulimit -n 1024 这表示当前用户的每个进程最多允许同时打开1024个文件,这1024个

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

[[email protected] ~]# cat /usr/local/nginx/conf/nginx.conf worker_processes 2; worker_cpu_affinity 01 10;worker_rlimit_nofile 65535; # worker 进程最大打开文件数,可设置为优化后的 ulimit -HSn 的结果 user nginx nginx; events { worker_connections 1024; } http { include mim

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

linux 打开文件数 too many open files 解决方法 too many open files 出现这句提示的原因是程序打开的文件/socket连接数量超过系统设定值. 查看每一个用户最大同意打开文件数量 ulimit -a [email protected]:~$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 20 fi

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

出现这句提示的原因是程序打开的文件/socket连接数量超过系统设定值.查看每个用户最大允许打开的文件数量ulimit -a 其中 open files (-n) 1024 表示每个用户最大允许打开的文件数量是1024 当前系统文件句柄的最大数目,只用于查看,不能设置修改cat /proc/sys/fs/file-max 查看某个进程的打开文件限制数cat /proc/10446(pid)/limits 设置open files 数值方法ulimit -n 4096 种设置方法在重启后会还原为默

Linux 打开文件数1024限制的原理以及解决办法

/proc/sys/fs/file-max  该文件指定了可以分配的文件句柄的最大数目. 查看最大值: [[email protected] home]# cat /proc/sys/fs/file-max  100977 [[email protected] home]# 这表明这台Linux系统最多允许同时打开(即包含所有用户打开文件数总和)100977个文件,是Linux系统级硬限制,所有用户级的打开文件数限制都不应超过这个数值.通常这个系统级硬限制是Linux系统在启动时根据系统硬件资源

Linux最大打开文件数

Linux下每个用户.用户的每个进程能够同时打开的文件句柄数量是有限制的.不用的文件句柄要关上. 一.查看最大打开文件数 1.查看系统及最大打开文件数 cat /proc/sys/fs/file-max //该文件指定了可以分配的文件句柄的最大数目 2.查看当前用户最大打开文件数 # ulimit -Hn //查看硬限制 # ulimit -Sn //查看软限制 3.查看所有进程的文件打开数 lsof |wc -l 查看某个进程打开的文件数  lsof -p pid |wc -l 二.设置最大打

Cent OS下修改用户打开文件数限制

如果有用户test,现在需要修改此用户打开文件数限制,步骤如下:1 修改Linux下资源使用的配置文件,添加以下参数:sudo vim /etc/security/limits.conftest soft nproc 65534test hard nproc 65534test soft nofile 65534test hard nofile 65534 参数说明:nproc:用户可用的最大进程数量nofile:用户可打开的最大文件总数soft即是软限制,hard是硬限制.用户可以超过soft

在Linux最大打开文件数限制下 MySQL 对参数的调整

http://www.actionsky.com/docs/archives/78 2016年4月7日  周文雅 目录 1 起因 2 说明 3 MySQL调整参数的方式 3.1 计算 request_open_files 3.1.1 根据配置值计算request_open_files 3.1.2 计算effective_open_files 3.1.3 修正 request_open_files 3.2 计算出生效的参数值 3.2.1 修正 open_files_limit 3.2.2 修正 m

mysql打开文件数太多的解决办法

http://www.orczhou.com/index.php/2010/10/mysql-open-file-limit/ http://www.cnblogs.com/end/archive/2013/02/02/2890018.html 然后, 以root身份重新启动 mysqld. 在这里, 尽管 my.cnf 中指定的运行用户不是root, 一样可以以root身份来启动mysqld, 否则 open_files_limit 选项无法生效, 因为内核限制了普通用户的最多打开文件数.