ulimit 命令用于控制 shell 进程及其子进程的资源限制。在 CentOS 系统中,你可以使用 ulimit 来设置或查看用户进程的资源限制,如文件大小、打开文件数、进程数等。
查看当前资源限制
使用 ulimit -a 可以查看当前 shell 会话的所有资源限制:
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) 128192
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) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
设置资源限制
使用 ulimit 可以临时设置某个资源的限制。语法如下:
ulimit [选项] [资源限制]
常见选项和资源限制:
-a:查看当前所有资源限制。
-c:设置核心文件的最大大小(以 blocks 为单位)。例如,设置为 0 表示禁止生成核心转储文件。
ulimit -c 0
-d:设置数据段的最大大小(以 KB 为单位)。
ulimit -d 51200
-f:设置单个文件的最大大小(以 blocks 为单位)。
ulimit -f 10240
-n:设置可打开文件的最大数量。
ulimit -n 2048
-u:设置用户可同时运行的最大进程数。
ulimit -u 1024
-m:设置进程可使用的内存最大值(以 KB 为单位)。
ulimit -m 512000
-s:设置栈的最大大小(以 KB 为单位)。
ulimit -s 8192
-t:设置 CPU 时间的最大值(以秒为单位)。
ulimit -t 3600
注意:使用 ulimit 设置的资源限制仅对当前 shell 会话及其子进程有效,关闭终端或重新登录后会失效。
永久设置资源限制
如果希望永久修改资源限制,可以通过编辑系统配置文件来实现:
针对单个用户:编辑 /etc/security/limits.conf 文件,添加如下内容:
username soft nofile 2048
username hard nofile 4096
其中 username 是目标用户名,soft 表示软限制,hard 表示硬限制。
针对所有用户:编辑 /etc/security/limits.conf 文件,添加全局设置:
* soft nofile 2048
* hard nofile 4096
调整系统级别的限制:编辑 /etc/sysctl.conf 文件,添加或修改相关参数,然后运行 sysctl -p 使其生效。例如:
fs.file-max = 100000
修改 PAM 配置:确保 /etc/pam.d/system-auth 或 /etc/pam.d/login 中包含以下行,以使 limits.conf 的设置生效:
session required pam_limits.so
注意:修改系统配置文件后,需要重新登录或重启服务才能使更改生效。
假设你想限制当前用户在单个会话中最多只能打开 512 个文件,可以执行:
ulimit -n 512
验证设置是否生效:
ulimit -n
应输出 512。
ulimit 选项-H:设置硬限制。-S:设置软限制。-V:显示版本信息。例如,将某个资源的软限制和硬限制同时设置为特定值:
ulimit -H -n 1024
ulimit -S -n 512
ulimit 设置的限制仅对当前 shell 会话及其子进程有效,不会影响其他用户的会话或系统全局设置。ulimit 提高了某些资源的限制,系统本身可能还有其他限制(如内核参数)需要调整才能完全生效。通过合理使用 ulimit,你可以有效地管理系统资源,防止个别进程消耗过多资源,从而提升系统的稳定性和性能。