/etc/security/limits.conf的Max open files等限制在systemd服务中启动时 /proc/pid/limits 中未生效的解决方法

在 CentOS7&Ubuntu系统中,使用Systemd替代了之前的SysV。

/etc/security/limits.conf 文件的配置作用域缩小了。

/etc/security/limits.conf 的配置,只适用于通过 PAM 认证登录用户的资源限制,它对systemd的service的资源限制不生效。因此登录用户的限制,通过/etc/security/limits.conf 与 /etc/security/limits.d 下的文件设置即可。

对于 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 是用户实例使用的。

vi /etc/systemd/system.conf

将DefaultLimitNOFILE注释去掉,然后赋值

#DefaultLimitSTACK=
#DefaultLimitCORE=
#DefaultLimitRSS=
DefaultLimitNOFILE=10000
#DefaultLimitAS=
#DefaultLimitNPROC=10240
#DefaultLimitMEMLOCK=
#DefaultLimitLOCKS=
#DefaultLimitSIGPENDING=
#DefaultLimitMSGQUEUE=
#DefaultLimitNICE=
#DefaultLimitRTPRIO=
#DefaultLimitRTTIME=

使systemd重新加载配置

systemctl daemon-reexec

重启想要更改资源限制的服务

systemctl restart service

这时就会发现服务的资源限制发生了变化(我本机的进程号是21105,可以利用systemctl status 服务名或top查看进程号)

[root@localhost ~]# cat /proc/21105/limits 
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             63449                63449                processes 
Max open files            10000                10000                files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       63449                63449                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us 


可以发现max open files发生了变化

之所以不用daemon-reload,是因为daemon-reexec 会重新执行systemd管理器,重新读取系统配置文件,而daemon-reload只会去读service部分的配置,不包含全局配置/systemd/system.conf,daemon-reexec相当于重量级的daemon-reload.

以上是针对全局服务的资源限制修改,而针对具体某一服务只需修改服务配置文件,以rsyslog为例

vi /usr/lib/systemd/system/rsyslog.service
[Unit]
Description=System Logging Service
;Requires=syslog.socket
Documentation=man:rsyslogd(8)
Documentation=http://www.rsyslog.com/doc/

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/rsyslog
ExecStart=/usr/sbin/rsyslogd -n $SYSLOGD_OPTIONS
UMask=0066
StandardOutput=null
Restart=on-failure
# Increase the default a bit in order to allow many simultaneous
# files to be monitored, we might need a lot of fds.
LimitNOFILE=16384

[Install]
WantedBy=multi-user.target
;Alias=syslog.service

在配置Service单元加上LimitNOFILE以及要限制的最大打开文件个数

systemctl daemon-reload
systemctl restart rsyslog

这时候再去查看文件资源

[root@localhost ~]# cat /proc/17091/limits 
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             63449                63449                processes 
Max open files            16384                16384                files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       63449                63449                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us 

可以发现服务的最大打开文件限制已经变成了16384

参考[https://www.cnblogs.com/hellxz/p/12509620.html]

参考2[http://www.jinbuguo.com/systemd/systemd.exec.html#LimitNOFILE=]

参考来源:https://www.jianshu.com/p/0ae284ed971d
资料来源:电子书《ECS运维指南之Linux系统诊断》,下载链接:https://developer.aliyun.com/topic/download?id=143

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值