ulimit - 命令
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. 命令实例
- 查看所有默认设置项值
# 可以看到对于一些已有的配置会提示用什么选项,以及单位
[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
- 软限制设置 core dump 文件最大大小为 2048
[root@localhost ~]# ulimit -Sc 51200
- core dump 文件大小无限制
[root@localhost ~]# ulimit -c unlimited
- 限制管道缓冲区大小为 512Kbytes(KB)
[root@localhost ~]# ulimit -p 512
- 查看当前终端进程 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