CentOS 7 systemd的坑

一、概述

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

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

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

1 Max open files            1024                1024                files

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

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

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

# /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。

  systemd 还可以对普通用户启动,使用 --user 参数。

二、解决之道

 在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目录中的配置覆盖了。

时间: 2024-09-27 07:54:22

CentOS 7 systemd的坑的相关文章

CENTOS设置SYSTEMD SERVICE的ULIMIT资源限制

在bash中,有个ulimit命令,提供了对shell及该shell启动的进程的可用资源控制.主要包括打开文件描述符数量.用户的最大进程数量.coredump文件的大小等. 在centos 5/6 等版本中,资源限制的配置可以在 /etc/security/limits.conf 设置,针对root/user等各个用户或者*代表所有用户来设置. 当然,/etc/security/limits.d/ 中可以配置,系统是先加载limits.conf然后按照英文字母顺序加载limits.d目录下的配置

Linux有问必答:如何在VPS上安装和访问CentOS 7远程桌面

Linux有问必答:如何在VPS上安装和访问CentOS 7远程桌面 提问: 我想在VPS中安装CentOS桌面,并可以直接从我家远程访问GUI桌面.在VPS上设置和访问CentOS远程桌面有什么建议吗? 如何远程办公或者远程弹性化工作制在技术领域正变得越来越流行.这个趋势背后的一个技术就是远程桌面.你的桌面环境在云中,你可以在任何你去的地方,或者在家或者工作场所访问你的远程桌面. 这个教程介绍如何VPS中设置基于CentOS的远程桌面.现在,我们会先展示CentOS的基础环境. 我们假设你已经

Docker 的配置文件说明

由于 Linux 不同发行版所采用的默认管理框架的不同,Docker 在不同环境下所使用的默认配置文件也有所不同.这给初学者带来了极大的困惑和不便.好消息是,Docker 官方也意识到了这个问题,所以从 V1.12 开始,引入了并行通用配置文件 /etc/docker/daemon.json .从此以后,用户可以在所有平台统一通过调整该配置文件来调整 Docker Engine.本文对此进行简要说明. 配置文件 通用配置文件 /etc/docker/daemon.json Docker Engi

mysql5.7在centos上安装的完整教程以及相关的“坑”

安装前的准备 Step1: 如果你系统已经有mysql,如一般centos自带mysql5.1系列,那么你需要删除它,先检查一下系统是否自带mysql yum list installed | grep mysql Step2: 删除系统自带的mysql及其依赖命令 yum -y remove mysql-libs.x86_64 Step3: 给CentOS添加rpm源,并且选择较新的源命令 wget dev.mysql.com/get/mysql-community-release-el6-5

Linux Systemd——在RHEL/CentOS 7中启动/停止/重启服务

Linux Systemd--在RHEL/CentOS 7中启动/停止/重启服务 RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Linux标准组的启动脚本. Systemd是一个Linux操作系统下的系统和服务管理器.它被设计成向后兼容SysV启动脚本,并提供了大量的特性,如开机时平行启动系统服务,按需启动守护进程,支持系统状态快照,或者基于依赖的

centos上安装elasticsearch 5.5.1 遇到的各种坑

mac玩得好好滴,一次性启动成功,结果在centos上安装时,遇坑无数,记录一下: 一.只能localhost访问的问题修改 conf\elasticsearch.yml network.host: 0.0.0.0 http.port: 9200 discovery.zen.ping.unicast.hosts: ["0.0.0.0"] 二.各种启动 ... too low 的妖娥子 比如:max file descriptors [4096] for elasticsearch pr

怎么在CentOS系统上安装Docker

  Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单.容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止.Docker 帮助系统管理员和程序员在容器中开发应用程序,并且可以扩展到成千上万的节点. 容器和 VM(虚拟机)的主要区别是,容器提供了基于进程的隔离,而虚拟机提供了资源的完全隔离.虚拟机可能需要一分钟来启动,而容器只需要一秒钟或更短.容器使用宿主操作系统的内核,而虚拟机使用独立的内核. Docker 的局限性之一是,它只能用在 64 位的操作系统上. 在

CentOS 7下怎么搭建高可用集群?

  CentOS 7下怎么搭建高可用集群.高可用集群是指以减少服务中断时间为目的的服务器集群技术.它通过保护用户的业务程序对外不间断提供的服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度.那么新的centos下怎么来搭建高可用集群. 环境:本文以两台机器实现双集热备高可用集群,主机名node1的IP为192.168.122.168 ,主机名node2的IP为192.168.122.169 . 一.安装集群软件必须软件pcs,pacemaker,corosync,fence-agen

CentOS 7下 yum方式安装Nginx

Nginx 是一个很强大的高性能Web和反向代理服务器,它具有众多非常优越的特性.诸如低开销,高并发,支持缓存,支持正反向代理,支持负载均衡,支持正则,支持rewrite等等不一而足.所以众多粉丝们也是不计其数.本文基于CentOS 7简要描述yum方式的安装部署,供大家参考. 如果是编译安装可以参考:Linux 6下安装编译安装Nginx 有关Nginx的常用配置可参考:Nginx 概述及日常管理 一.配置nginx yum源 演示环境 [root@centos7-router ~]# mor