CentOS 7 systemd的坑

1、概述

 在从 CentOS 6 迁移到 CentOS 7 的过程当中,可能有一些地方须要调整,最显著的地方莫过于 systemd 带来的改变,不一样的管理服务的方式,不一样的日志方式,设置时区,时间等等。 固然,除了这些显而易见的改变以外,有些变化并非那么引人注目,例如这里要介绍的你可能发现曾经配置了正确的 /etc/security/limits.conf 在 CentOS 7 中却没有生效了。nginx

  若是遇到上面的问题,极可能已经致使了你的应用异常了,例如:之前配置了服务的 nproc 为一个很是大的数值, 结果如今发现服务不能打开更多的文件。ide

  惊讶之余,查看服务的 /proc/<pid>/limits 却发现:spa

1 Max open files            1024                1024                files

  那么,为何服务使用 systemd 启动就没有生效呢?rest

  根据 redhat bugzilla 754285, systemd 其实是会忽略 /etc/security/limits.conf,下面是 systemd 2 号人物的回答:日志

  而这个 bug 也标记为已解决,在 pam 包中解决,这个包包含了 /etc/security/limits.conf, 在这个文件中加入了以下注释:code

# /etc/security/limits.conf
#
#This file sets the resource limits for the users logged in via PAM.
#It does not affect resource limits of the system services.
#

注意,这里的 system services 指的是 system wide service,对于 CentOS 7 来讲也就是系统的 service。blog

  systemd 还能够对普通用户启动,使用 --user 参数。进程

2、解决之道

 在CentOS 7 / RHEL 7的系统中,使用Systemd替代了以前的SysV,所以 /etc/security/limits.conf 文件的配置做用域缩小了一些。limits.conf这里的配置,只适用于经过PAM认证登陆用户的资源限制,它对systemd的service的资源限制不生效。登陆用户的限制,与上面讲的同样,经过 /etc/security/limits.conf 和 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用户实例使用的。通常的sevice,使用system.conf中的配置便可。systemd.conf.d/*.conf中配置会覆盖system.conf。

1 DefaultLimitCORE=infinity
2 DefaultLimitNOFILE=100000
3 DefaultLimitNPROC=100000

  而后运行以下命令,才能生效。

1 sudo systemctl daemon-reload
2 sudo systemctl restart nginx.service

查看一个进程的limit设置:cat /proc/YOUR-PID/limits
例如个人一个nginx service的配置效果:

 1 $cat /proc/$(cat /var/run/nginx.pid)/limits
 2 Limit                     Soft Limit           Hard Limit           Units
 3 Max cpu time              unlimited            unlimited            seconds
 4 Max file size             unlimited            unlimited            bytes
 5 Max data size             unlimited            unlimited            bytes
 6 Max stack size            8388608              unlimited            bytes
 7 Max core file size        unlimited            unlimited            bytes
 8 Max resident set          unlimited            unlimited            bytes
 9 Max processes             100000               100000               processes
10 Max open files            100000               100000               files
11 Max locked memory         65536                65536                bytes
12 Max address space         unlimited            unlimited            bytes
13 Max file locks            unlimited            unlimited            locks
14 Max pending signals       1030606              1030606              signals
15 Max msgqueue size         819200               819200               bytes
16 Max nice priority         0                    0
17 Max realtime priority     0                    0
18 Max realtime timeout      unlimited            unlimited            us

  顺便提一下,我还被CentOS7自带的/etc/security/limits.d/20-nproc.conf文件坑过,里面默认设置了非root用户的最大进程数为4096,难怪我上次在limits.conf中设置了没啥效果,原来被limit.d目录中的配置覆盖了。

相关文章
相关标签/搜索