在 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