在 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
,可以有效地管理系统资源,防止某个进程消耗过多资源,从而提高系统的稳定性和安全性。