Linux系统资源限制参考手册
Linux系统资源限制参考手册
适用系统环境
RHEL6
RHEL7
CentOS6
CentOS7
Linux系统资源限制方法
对系统中运行的用户进程设置资源限制有两种途径:
pam_limits.so模块。正常用户登录过程中将执行pam_limits.so模块,由用户启动的进程资源将受到pam_limits.so模块配置的影响,配置文件分别为:
/etc/security/limits.conf
/etc/security/limits.d/*.conf
systemd管理服务。在RHEL7、CentOS7以上版本的Linux系统中,由systemd管理的系统服务其资源限制配置在/usr/lib/systemd/system/目录中的服务配置文件里面,不受pam_limits.so模块的影响。
配置语法
参考文档man limits.conf
格式:(每一项间隔可以是空格或TAB制表符)
举例:
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 102400
oracle hard nproc 102400
domain语法
用户名
用户组,如@group
用户ID或用户ID范围,如:
用户组ID或用户组ID范围,如@:
通配符*,代表所有Linux系统用户
通配置%,只适用于maxlogin限制项,%group代表名为group的用户组
type语法
hard,施行强制资源限制,简称硬限制
soft,施行软性资源限制,简称软限制
‘-’ 中横线(减号),代表同时施行强制和软性资源限制,是配置软硬限制数值一样时的简写方法
注意
如果type为'-',但缺少item和value字段内容,则用户或组将不再受到任何限制
声明
下文默认配置数值参考CentOS7 64位版本
item配置内容
core - limits the core file size (KB)
data - max data size (KB)
fsize - maximum filesize (KB)
memlock - max locked-in-memory address space (KB)
nofile - max number of open file descriptors
rss - max resident set size (KB)
stack - max stack size (KB)
cpu - max CPU time (MIN)
nproc - max number of processes
as - address space limit (KB)
maxlogins - max number of logins for this user
maxsyslogins - max number of logins on the system
priority - the priority to run user process with
locks - max number of file locks the user can hold
sigpending - max number of pending signals
msgqueue - max memory used by POSIX message queues (bytes)
nice - max nice priority allowed to raise to values: [-20, 19]
rtprio - max realtime priority
core配置说明
core配置项指的是core dump文件的大小限制,当用户进程由于某些信号退出时,将在进程的工作目录生成一个名为core的文件,可以用gdb debugger程序打开查看进程退出时的状态信息。默认值为0,即不生成core文件。
Core dump is a disk file that contains an image of a process’s memory at the moment of its termination, generated by the Linux kernel when processing some signals like SIGQUIT, SIGILL, SIGABRT, SIGFPE and SIGSEGV.
data配置说明
data配置data segment空间,默认为ulimited,单位KB。进程的data段包含静态变量和常量,以及进程启动不能初始化的heap segment,配置data项主要是为了避免进程申请过大的heap段空间。
fsize配置说明
限制用户创建超过指定大小的文件。默认为无限制,单位KB。
[oracle@dev ~]$ ulimit -f 20
[oracle@dev ~]$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) 20
...
[oracle@dev ~]$ dd if=/dev/zero of=1.txt bs=1K count=10
10+0 records in
10+0 records out
10240 bytes (10 kB) copied, 0.000383234 s, 26.7 MB/s
[oracle@dev ~]$ dd if=/dev/zero of=1.txt bs=1K count=30
File size limit exceeded
memlock配置说明
允许用户最大锁定内存地址空间,单位KB,默认值64。
此限制允许进程锁定内存空间不被交换(paged out)。通常被数据库管理应用(如Oracle、Sybase)用于锁定部分内存,作为共享池空间使用,以便多个会话进程同时访问。
nofile配置说明
用户进程最大文件打开数量,默认为1024
rss配置说明
用户进程最大虚拟内存空间,默认为unlimited。内核版本2.4.30以上此配置无效
stack配置说明
用户进程的栈空间限制。单位KB,默认值8192。与data配置相似,某些大型应用(如DB)需要占用更大的堆栈空间,按需求配置即可
cpu配置说明
用户进程CPU时间限制,单位分钟。这里的CPU TIME指的是用户进程占用CPU的时间
[root@dev ~]# cat /etc/security/limits.conf
oracle - cpu 2
[oracle@dev ~]$ dd if=/dev/urandom of=/dev/null bs=1K count=20000000000000
Killed
nproc配置说明
用户进程数量限制,默认为4096
as配置说明
虚拟内存地址空间大小限制,默认为无限制,单位KB
[root@dev ~]# cat /etc/security/limits.conf
oracle - as 10240
[root@dev ~]# su - oracle
Last login: Thu Dec 17 13:47:30 CST 2020 on pts/3
\/usr/bin/id: error while loading shared libraries: libdl.so.2: failed to map segment from shared object: Cannot allocate memory
/usr/bin/id: error while loading shared libraries: libdl.so.2: failed to map segment from shared object: Cannot allocate memory
/usr/bin/id: error while loading shared libraries: libdl.so.2: failed to map segment from shared object: Cannot allocate memory
-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_COLLATE: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_NUMERIC: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_TIME: cannot change locale (en_US.UTF-8): No such file or directory
/usr/bin/id: error while loading shared libraries: libdl.so.2: failed to map segment from shared object: Cannot allocate memory
-bash: [: : integer expression expected
maxlogins配置说明
用户最大登录会话数
priority配置说明
用户进程初始nice值
[root@dev ~]# cat /etc/security/limits.conf
oracle - priority -1
[oracle@dev ~]$ ps ax -o user,pid,ni,cmd |grep oracle
root 40785 -1 su - oracle
oracle 40786 -1 -bash
oracle 40817 -1 ps ax -o user,pid,ni,cmd
oracle 40818 -1 grep --color=auto oracle
locks配置说明
允许用户锁定文件的最大数量,默认为无限制
sigpending配置说明
用户信号最大等待数量,默认为7184。这种pending通常由于访问I/O出现等待异常,用户进程处于不可中断休眠D(uninterruptible sleep)状态,所有发给进程的信号(sigterm, sigkill, sigstop, …)将处于pending状态
msgqueue配置说明
用户进程消息队列最大内存占用,单位Byte,默认为819200
nice配置说明
允许用户最高nice值限制,默认为0。取值范围-20~19
rtprio配置说明
用户实时进程最大优先级,范围1~99,99为最优先,默认为0。通过chrt命令可查看scheduling policy判断是否实时进程,SCHED_FIFO为实时进程,SCHED_OTHER为非实时进程
# chrt -p 5
pid 5's current scheduling policy: SCHED_FIFO
pid 5's current scheduling priority: 99
value语法
0或大于0的正整数
除nice和priority配置项以外,-1、unlimited、infinity代表无限制
FAQ常见问题
配置的优先级
用户ulimit命令自定义优先级别最高,但不能超出pam_limits.so配置中的限制
/etc/security/limits.d/目录中配置比/etc/security/limits.conf文件w优先级更高,将会覆盖/etc/security/limits.conf文件中相同的配置项
limits.conf文件中配置内容的生效时间
引用红帽官方回复 - https://access.redhat.com/solutions/61334
Exit and re-login from the terminal for the change to take effect.
配置生效机制是用户通过PAM验证登录过程中,调用了pam_limits.so库,使limits.conf文件的配置对当前登录的用户生效
避免通配符*滥用的建议
通配符*代表全部用户,包括root用户,在某些配置中可能会出现意外情况。如maxlogins,下面的配置导致root用户被限制10个以下登录会话
* - maxlogins 10
参考文档
标签:参考手册,limits,配置,用户,说明,Linux,oracle,限制,系统资源
来源: https://blog.csdn.net/cw03192/article/details/111316152