在 Linux 中限制进程资源,常见且实用的方法主要有以下几种,按使用场景从常用到高级给你系统梳理一下:
ulimit(最常用,针对 shell 会话)ulimit -a
| 资源 | 说明 |
|---|---|
-n |
最大文件描述符 |
-u |
最大进程数 |
-m |
最大内存(RSS,部分系统无效) |
-v |
虚拟内存 |
-t |
CPU 时间(秒) |
-f |
最大文件大小 |
ulimit -n 65535
ulimit -u 4096
ulimit -v 1048576 # KB
⚠️ 注意
ulimit 只对当前 shell 及其子进程生效编辑:
/etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 4096
* hard nproc 4096
需要 PAM 支持(通常默认开启)
systemd(推荐,服务进程)# /etc/systemd/system/xxx.service
[Service]
MemoryMax=512M
CPUQuota=50%
TasksMax=200
然后:
systemctl daemon-reexec
systemctl restart xxx
systemctl show xxx | grep -E "Memory|CPU|Tasks"
✅ 适合:
cgroups(最底层、最强大)mkdir /sys/fs/cgroup/memory/myapp
echo 512M > /sys/fs/cgroup/memory/myapp/memory.limit_in_bytes
echo $$ > /sys/fs/cgroup/memory/myapp/cgroup.procs
mkdir /sys/fs/cgroup/myapp
echo "max 512M" > /sys/fs/cgroup/myapp/memory.max
echo $$ > /sys/fs/cgroup/myapp/cgroup.procs
✅ 适合:
nice / cpulimit(CPU 限制)nice -n 10 ./app
cpulimit -l 50 ./app
⚠️ cpulimit 不是真正限制,而是“压制”
docker run -m 512m --cpus=1.5 myimage
底层仍是 cgroups
| 场景 | 推荐方式 |
|---|---|
| 临时测试 | ulimit |
| 登录用户 | limits.conf |
| 系统服务 | systemd |
| 容器 | cgroups / Docker |
| 精细控制 | cgroups |
MemoryMax=512M
mkdir /sys/fs/cgroup/myapp
echo 512M > /sys/fs/cgroup/myapp/memory.max
如果你愿意,我可以:
你可以直接说使用场景,比如:“我想限制 Python 脚本内存”。