ulimit 是一种 linux 系统的内建功能,用于为由它生成的 shell 进程及其子进程的资源使用设置限制。
包括:
-
所创建的内核文件的大小
-
进程数据块的大小
-
Shell 进程创建文件的大小
-
内存锁住的大小
-
常驻内存集的大小
-
打开文件描述符的数量
-
分配堆栈的最大大小
-
CPU 时间
-
单个用户的最大线程数
-
Shell 进程所能使用的最大虚拟内存
ulimit 命令的格式为:ulimit [options] [limit]
使用ulimit -a列出当前shell的设置。
在每一项中都标明了这一项所对应的参数。例如-n代表open files。
-
# 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) 127460
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) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 127460
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
-
它分为硬资源和软资源的限制。
硬资源限制,一旦设置不能增加。
软资源限制,设置后可以增加,但是不能超过硬资源设置。
ulimit不带 -H 参数时,默认是软限制。
-
# ulimit -n
-
1024
-
# ulimit -Sn
-
1024
-
# ulimit -Hn
-
4096
例如:
ulimit –c unlimited # 对生成的 core 文件的大小不进行限制。
ulimit -HSn 4096 # open files的软、硬限制都设置为4096
关于ulimit的作用域:
在shell中通过ulimit命令设置的,只影响当前shell,不影响其他shell会话。重新登录时会失效。
在profile中设置的,影响所有登录shell。
使用/etc/security/limits配置文件。该文件不仅能限制指定用户的资源使用,还能限制指定组的资源使用。
另外,对于整个系统的总限制,可以在/etc/sysctl.conf中设置。
也就是说,
希望在当前shell中临时生效,则在shell中执行ulimit命令。
希望系统范围临时生效,修改/proc下的对应项。(例如: echo 4096 > /proc/sys/fs/file-max)
希望长久有效,则在profile中设置ulimit,
希望对特定用户或组设置,则在/etc/security/limits中设置,
希望系统范围长久有效,修改/etc/sysctl.conf(修改后执行sysctl -p立即生效)
参考:
通过 ulimit 改善系统性能
https://www.ibm.com/developerworks/cn/linux/l-cn-ulimit/
阅读(1381) | 评论(0) | 转发(0) |