ulimit

0. 介绍

系统性能一直是一个比较受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段

ulimit 是一种 Linux 系统的内置功能,它具有一套参数集,用于为由它生成的 shell 进程及其子进程的资源使用设置限制

1. ulimit 命令选项

选项 含义
-S 设置软资源限制
-H 设置硬资源限制
-a 所有当前限制都被报告
-b 套接字缓存尺寸
-c 创建的核文件的最大尺寸
-d 一个进程的数据区的最大尺寸
-e 最高的调度优先级 (nice)
-f 有 shell 及其子进程可以写的最大文件尺寸
-i 最多的可以挂起的信号数
-k 分配给此进程的最大 kqueue 数量
-l 一个进程可以锁定的最大内存尺寸
-m 最大的内存进驻尺寸
-n 最多的打开的文件描述符个数
-p 管道缓冲区尺寸
-q POSIX 信息队列的最大字节数
-r 实时调度的最大优先级
-s 最大栈尺寸
-t 最大的CPU时间,以秒为单位
-u 最大用户进程数
-v 虚拟内存尺寸
-x 最大的文件锁数量
-P 最大伪终端数量
-T 最大线程数量

2. 命令实例

  1. 查看所有默认设置项值
# 可以看到对于一些已有的配置会提示用什么选项,以及单位
[root@localhost ~]# ulimit -a
core file size          (blocks, -c) 51200
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 13346
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) 13346
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

  1. 软限制设置 core dump 文件最大大小为 2048
[root@localhost ~]# ulimit -Sc 51200

  1. core dump 文件大小无限制
[root@localhost ~]# ulimit -c unlimited

  1. 限制管道缓冲区大小为 512Kbytes(KB)
[root@localhost ~]# ulimit -p 512

  1. 查看当前终端进程 limits
# echo $$ : 打印当前终端 pid
[root@localhost ~]# echo $$ | cat /proc/`awk '{print $1}'`/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        52428800             52428800             bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             13346                13346                processes 
Max open files            1024                 524288               files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       13346                13346                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us  

3. soft limit 和 hard limit

  • 软限制是内核对相应资源强制执行的值,硬限制作为软限制的上限,即软限制值无法超过硬限制的值

  • 如果没有相应的设置权限,如 root,只能将其软限制设置为 0 到硬限制范围内的值,并且(不可逆地)降低其硬限制,即硬限制值修改了,后面再修改只能降低不能升高,当然软限制值只要在硬限制值范围内都是可以修改的,而拥有设置权限的用户可以对任一限制的值进行任意更改

4. ulimit 文件

[root@localhost ~]# vim /etc/security/limits.conf
# /etc/security/limits.conf
# 
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#        - a user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#                 for maxlogin limit
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - 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
#
#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4

# End of file

通过设置 domain 字段来指定生效范围,如可以指定用户名或者组名等,配置项说明如下:

选项 含义
core 限制内核文件的大小
date 最大数据大小
fsize 最大文件大小
memlock 最大锁定内存地址空间
nofile 打开文件的最大数目( socket fd 也属于文件,因此可以设置该项)
rss 最大持久设置大小
stack 最大栈大小
cpu 以分钟为单位的最多 CPU 时间
noproc 进程的最大数目
as 地址空间限制
maxlogins 此用户允许登录的最大数目

注意修改完limits.conf文件后,需要重启才能生效,通过ulimit -a检验是否生效

要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中

/etc/pam.d/login 文件中添加:

session required /lib/security/pam_limits.so

靡不有初,鲜克有终   -Tzyy

版权声明:本文为Tzyyviki原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Tzyyviki/p/14637187.html