too many open files

上周重启了几台服务器,这周开始发现有连接报错,服务器本地看报too many open files。

上周重启服务器时,我将程序启动脚本放到rc.local中开机自启。由此接触到了一个坑:

查看当前系统打开的文件数量: lsof | wc -l

查看当前进程的打开文件数量:lsof -n -P -p PID | wc -l

查看当前进程的最大可以打开的文件数:cat /proc/PID/limits

查看系统总限制打开文件的最大数量:cat /proc/sys/fs/file-max

同样的启动脚本,手动执行后/proc/PID/limits的值和ulimit -n相同,但是通过rc.local拉起来的进程/proc/PID/limits是4096!!!

在CentOS7.X的系统中,使用Systemd替代了之前的SysV,因此/etc/security/limits.conf文件的配置作用域缩小了一些。limits.conf这里的配置,只是用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。登录用户的限制,与上面讲的一样,通过 /etc/security/limits.conf 来配置即可。

对于systemd service的资源限制,如何配置呢?全局的配置,放在文件/etc/systemd/system.conf和/etc/systemd/user.conf,同时,也会加载两个对应的目录中的所有.conf文件/etc/systemd/system.conf.d/*.conf和/etc/systemd/user.conf.d/*.conf其中,system.conf是系统实例使用的,user conf用户实例使用的。一般的sevice,使用system.con中的配置可。system.config.d/*conf中配置会覆盖system.conf。

# 每个进程可以打开的最大文件描述符数量
DefaultLimitNOFILE=65535
# 用于设置服务启动时允许的最大进程数
DefaultLimitNPROC=65535

修改了system.conf后,需要重启系统才会生效。

默认/etc/systemd/ysstem.conf里内容都是注释掉的,所以rc.local拉起程序的Max open files都用了默认值。

所以,改一下/etc/systemd/system.conf里的默认值即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值