Centos下是通过ulimit进行资源限制,本文介绍一下ulimit的详细设置。
默认配置
默认情况下,ulimit是最小设置。重点参数为open files与max user processes,open files默认为1024,max user processes默认为3870。
可能通过以下命令查看:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#查看所有的参数:
[root@zhaoxy ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 3870
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 3870
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
#查看max user processes参数:
[root@zhaoxy ~]# ulimit -u
3870
#查看open files参数:
[root@zhaoxy ~]# ulimit -n
1024
尤其是open files参数,过小时会造成程序在高并发时出现Too many open files的错误。
登录用户配置调整
在centos 5/6 等版本中,资源限制的配置可以在/etc/security/limits.conf设置,针对root/user等各个用户或者*代表所有用户来设置。 当然,/etc/security/limits.d/ 中可以配置,系统是先加载limits.conf然后按照英文字母顺序加载limits.d目录下的配置文件,后加载配置覆盖之前的配置。
1 | #添加以下参数: |
其中:
*: 代表所有的用户
nofile:代表open files
nproc: 代表max user processes
soft: 代表一个警告值,超过这个范围,会出现警告,但不会报错
hard: 代表一个真正意义的阀值,超过就会报错
-: 代表soft与hard
注意:
系统是先加载/etc/security/limits.conf中的配置,再加载/etc/security/limits.d/中的配置,后者会覆盖前者。
当用户为*时,受/etc/security/limits.d/中的配置限制,当指定具体的用户时,不受/etc/security/limits.d/中的限制。
当/etc/security/limits.conf中指定的用户为*时,需要修改/etc/security/limits.d/20-nproc.conf文件:1
2
3[root@zhaoxy ~]# vim /etc/security/limits.d/20-nproc.conf
#* soft nproc 65535
root soft nproc unlimited
SYSTEMD SERVICE配置调整
在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。
可以添加默认参数,修改/etc/systemd/system.conf配置:1
2
3
4[Manager]
DefaultLimitCORE=infinity
DefaultLimitNOFILE=100000
DefaultLimitNPROC=100000
注意:修改了system.conf后,需要重启系统才会生效。
针对单个Service,也可以设置,以nginx为例。虽然我们修改了/etc/security/limits.conf与/etc/security/limits.d/20-nproc.conf文件,但通过systemctl启动的服务还是默认的参数:1
2
3
4
5
6[root@zhaoxy proc]# cat /proc/3347/limits
Limit Soft Limit Hard Limit Units
...
Max processes 3870 3870 processes
Max open files 1024 4096 files
...
我们需要编辑/usr/lib/systemd/system/nginx.service 文件,添加以下参数:1
2
3
4[Service]
LimitCORE=infinity
LimitNOFILE=100000
LimitNPROC=100000
然后重启:1
2systemctl daemon-reload
systemctl restart nginx.service
再看看修改后的配置:1
2
3
4
5
6[root@zhaoxy proc]# cat /proc/3347/limits
Limit Soft Limit Hard Limit Units
...
Max processes 100000 100000 processes
Max open files 100000 100000 files
...
参考
http://www.cnblogs.com/MYSQLZOUQI/p/5054559.html
http://smilejay.com/2016/06/centos-7-systemd-conf-limits