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目录下的配置文件,后加载配置覆盖之前的配置。 一个配置示例如下:

*     soft   nofile    100000
*     hard   nofile    100000
*     soft   nproc     100000
*     hard   nproc     100000
*     soft   core      100000
*     hard   core      100000

不过,在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。

DefaultLimitCORE=infinity
DefaultLimitNOFILE=100000
DefaultLimitNPROC=100000
注意:修改了system.conf后,需要重启系统才会生效。

针对单个Service,也可以设置,以nginx为例。
编辑 /usr/lib/systemd/system/nginx.service 文件,或者
/usr/lib/systemd/system/nginx.service.d/my-limit.conf 文件,做如下配置:

[Service]
LimitCORE=infinity
LimitNOFILE=100000
LimitNPROC=100000

然后运行如下命令,才能生效。

sudo systemctl daemon-reload
sudo systemctl restart nginx.service
查看一个进程的limit设置:cat /proc/YOUR-PID/limits

例如我的一个nginx service的配置效果:

$cat /proc/$(cat /var/run/nginx.pid)/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        unlimited            unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             100000               100000               processes
Max open files            100000               100000               files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       1030606              1030606              signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

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

时间: 2024-10-13 10:17:27

CENTOS设置SYSTEMD SERVICE的ULIMIT资源限制的相关文章

CentOS 7 systemd的坑

一.概述 在从 CentOS 6 迁移到 CentOS 7 的过程中,可能有一些地方需要调整,最显著的地方莫过于 systemd 带来的改变,不同的管理服务的方式,不同的日志方式,设置时区,时间等等. 当然,除了这些显而易见的改变之外,有些变化并不是那么引人注目,例如这里要介绍的你可能发现曾经配置了正确的 /etc/security/limits.conf 在 CentOS 7 中却没有生效了. 如果遇到上面的问题,很可能已经导致了你的应用异常了,例如:以前配置了服务的 nproc 为一个非常大

VMware中CentOS设置静态IP的方法_VMware

因为之前搭建的MongoDB分片没有采用副本集,最近现网压力较大,所以准备研究一下,于是在自己电脑的虚拟机中搭建环境,但是发现之前VMware设置的是DHCP,所以每次重新resume后虚拟机中IP都变了,导致之前已经搭建好的mongodb环境老是出问题又要重新搭建很麻烦,所以设置一下静态静态IP,步骤很简单: 首先关闭VMware的DHCP: Edit->Virtual Network Editor 选择VMnet8,去掉Use local DHCP service to distribute

详解CentOs设置静态IP的方法_Linux

在做项目时由于公司局域网采用自动获取IP的方式,导到每次服务器重启主机IP都会变化.为了解决这个问题,我参考了其他的文章然后根据自己的情况设置静态IP解决了这个问题,处理方式如下: 1.修改网卡配置 编辑:vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth0 BOOTPROTO=static #设置网卡获得ip地址的方式,可能的选项为static,dhcp或boot

在设置reporting service和share point遇到错误

错误提示: 安装程序在正在设置 reporting service 和 share point 排除路径 期间遇到错误.错误为: 安装时发生严重错误 不知道是不是跟安装盘有关系,我遇到过2次,看网上许多人也都遇到过,查了一下KB,一堆的EN文,还要改注册表,真是不知所云,最后我试了试以下的步骤,解决之: 1.找到安装光盘上的dotnetfx.exe文件(即NET2.0安装文件),双击安装它,然后选择"修复"安装 2.在重启主机后,重新删除并重装一次IIS 3.通过添加/删除程序选择重新

centos设置当前系统时间命令

查看命令 date centos设置当前系统时间命令 [root@t1 data]# date --set "03/19/16 11:30" Sat Mar 19 11:30:00 PDT 2016 Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟.系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟,这个硬件时钟可以在BIOS中进行设置.当Linux启动时,硬件时钟会去读取系统时钟的设置,

详解CentOS设置程序开机自启动的方法_Linux

在CentOS系统下,主要有两种方法设置自己安装的程序开机启动. 1.把启动程序的命令添加到/etc/rc.d/rc.local文件中,比如下面的是设置开机启动httpd. #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the fu

CentOS设置服务开机启动的一些命令介绍

1.利用 chkconfig 来配置启动级别 在CentOS或者RedHat其他系统下,如果是后面安装的服务,如httpd.mysqld.postfix等,安装后系统默认不会自动启动的.就算手动执行 /etc/init.d/mysqld start 启动了服务,只要服务器重启后,系统仍然不会自动启动服务. 在这个时候,我们就需要在安装后做个设置,让系统自动启动这些服务,避免不必要的损失和麻烦. 其实命令很简单的,使用chkconfig即可. 比如要将mysqld设置为开机自动启动:  代码如下

CentOS设置工作区个数

前一段时间一直用Ubuntu,Ubuntu默认有4个工作区,左右上下切换非常方便. 可是自己却偏爱 CentOS,默认只有2个工作区.今天找到设置它的方法了,很简单. 右击桌面右下角的工作区:   会弹出菜单,选择 "Preferences",则弹出如下对话框:   下面的事情,不用再多说了-

Centos设置开机启动Apache和Mysql[总结]

1.前言 最近学习搭建wordpress,需要用到apahce和mysql.我是下载源代码进行安装的,安装在/url/local目录下,每次开机都需要手动启动,有点麻烦.如是想设置开机启动,从网上查了一下,如何设置,总结一下,方便以后使用. 2.设置方法 有两种方法,一种是修改配置文件,一种是通过添加启动项. 方法一:根据系统启动的初始化过程,修改配置文件 Centos中的运行模式2.3.5都把/etc/rc.d/rc.local做为初始化脚本中的最后一个,所以用户可以自己在这个文件中添加一些需