在 CentOS 系统中,ulimit 命令用于设置或控制 shell 进程及其子进程可以使用的系统资源。通过 ulimit,你可以限制诸如打开的文件数、进程数、CPU 时间等资源。以下是如何使用 ulimit 来限制进程资源的详细说明和示例。
ulimit 参数-n:设置单个进程可以打开的最大文件描述符数量。-u:设置用户可以同时运行的最大进程数。-t:设置进程可以使用的最大 CPU 时间(以秒为单位)。-m:设置进程可以使用的最大内存大小(以 KB 为单位)。-v:设置进程可以使用的虚拟内存总量(以 KB 为单位)。-l:设置进程可以锁定的最大内存量(以 KB 为单位)。-f:设置进程可以创建的最大文件大小(以块为单位)。你可以在当前 shell 会话中临时设置资源限制。例如:
限制打开的文件数为 2048
ulimit -n 2048 限制用户可以同时运行的进程数为 512
ulimit -u 512 限制进程的 CPU 时间为 3600 秒(1 小时)
ulimit -t 3600 这些设置在关闭当前 shell 会话后将失效。
要使资源限制在系统重启后依然有效,需要修改系统的配置文件。通常涉及以下两个文件:
/etc/security/limits.conf/etc/profile 或用户的 ~/.bashrc、~/.bash_profile/etc/security/limits.conf编辑 /etc/security/limits.conf 文件,添加如下行来设置用户或组的资源限制:
# 限制用户名为 your_username 的用户的资源 your_username soft nofile 2048 your_username hard nofile 4096 # 限制特定组的资源 @groupname soft nproc 512 @groupname hard nproc 1024 说明:
soft 表示软限制。hard 表示硬限制。nofile 表示打开文件数的限制。nproc 表示允许的最大进程数。为了让每个用户在登录时自动应用资源限制,可以在 /etc/profile 或用户的个人启动文件(如 ~/.bashrc、~/.bash_profile)中添加 ulimit 命令。
例如,在 ~/.bashrc 中添加:
# 设置打开文件数 ulimit -n 2048 # 设置最大进程数 ulimit -u 512 注意:
source ~/.bashrc 使更改生效。使用 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) 123456 max locked memory (kbytes, -l) 64000 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) 512 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited 假设你想限制用户 john 的进程能够打开的最大文件数为 4096,并且最大进程数为 1024,可以按照以下步骤操作:
编辑 /etc/security/limits.conf
sudo vi /etc/security/limits.conf 添加以下内容:
john soft nofile 4096 john hard nofile 8192 john soft nproc 1024 john hard nproc 2048 修改 ~/.bashrc 以应用限制
vi ~/.bashrc 添加:
ulimit -n 4096 ulimit -u 1024 重新登录用户 john
让更改生效,需要重新登录用户 john,或者执行:
source ~/.bashrc 验证限制
切换到用户 john 并运行:
ulimit -a 确认 open files 和 max user processes 已正确设置。
/etc/security/limits.conf 需要超级用户权限。ulimit 可能不会影响这些服务。需要根据具体情况调整服务的配置文件(如 systemd 服务单元文件)。ulimit 的支持略有不同,确保在目标用户的 shell 中进行配置。通过合理使用 ulimit,可以有效地管理系统资源,防止某个进程消耗过多资源,从而提高系统的稳定性和安全性。