[隐藏] php
工商总局公示系统的前台业务系统用到tongweb中间件,业务运行期间java进程报出打开文件数过多的问题,修改了/etc/security/limits.conf中的打开文件数限制以下:shell
* soft nofile 65535 * hard nofile 65535
退出登录后,从新登录,再用ulimit -a查看,发现65535的修改并未生效, 在网上查找资料后,得知须要修改ssh配置vim
vi /etc/ssh/sshd_config UseLogin yes
重启ssh服务bash
/etc/init.d/ssh restart
再次登录用ulimit -a查看,发现65535的修改生效。
修改后java进程仍然报出打开文件数过多的问题,此时实际的打开文件数在4279个左右,通过排查,发如今Systemd中设置最大打开文件数与SysV的系统下有所区别,须要修改/etc/systemd/system.conf 和 /etc/systemd/user.conf两个文件都添加以下内容
ssh
DefaultLimitCORE=infinity DefaultLimitNOFILE=65535 DefaultLimitNPROC=65535
重启系统,而后再查看以下信息:
ide
cat /proc/[PID]/limits
此时java进程的最大打开文件数为65535,java进程也再也不报打开文件数过多的问题。spa
一、/proc/sys/fs/file-nr是系统当前打开的文件数,是一个只读的参数
二、/proc/sys/fs/file-max指定了系统范围内全部进程能够打开的文件句柄的数量限制,修改方法以下:
临时调整file-max:
echo 6553560 > /proc/sys/fs/file-max
永久调整file-max:
vim /etc/sysctl.conf, fs.file-max = 6553560
重启生效
三、ulimit是bash内置命令,提供了对shell及该shell启动的进程的可用资源控制,资源限制的配置能够在 /etc/security/limits.conf 设置,示例以下:
* soft nofile 65535 * hard nofile 65535
四、Systemd下的最大打开文件数设置
在Systemd替代了以前的SysV后,/etc/security/limits.conf 文件的配置做用域缩小了一些。limits.conf这里的配置,只适用于经过PAM认证登陆用户的资源限制,它对systemd的service的资源限制不生效。对于systemd service的资源限制的配置以下:
全局的配置,放在文件 /etc/systemd/system.conf和/etc/systemd/user.conf
DefaultLimitCORE=infinity DefaultLimitNOFILE=100000 DefaultLimitNPROC=100000
查看一个进程的limit设置:
cat /proc/[PID]/limits
针对单个Service,也能够设置,以nginx为例。编辑 /usr/lib/systemd/system/nginx.service 文件,或者 /usr/lib/systemd/system/nginx.service.d/my-limit.conf 文件,作以下配置:
[Service] LimitCORE=infinity LimitNOFILE=65535 LimitNPROC=65535
而后运行以下命令,才能生效。
sudo systemctl daemon-reload sudo systemctl restart nginx.service