在 Linux 中,限制进程资源通常有几种层级和工具,从“临时跑一个命令”到“长期服务管理”都有对应方案。下面按常见场景系统说明。
ulimit(shell 级限制)限制当前 shell 及其子进程的资源。
ulimit -a # 查看所有限制
ulimit -u 100 # 最大用户进程数
ulimit -n 1024 # 最大打开文件数
ulimit -v 500000 # 最大虚拟内存(KB)
ulimit -t 60 # CPU 时间(秒)
ulimit -f 10000 # 文件大小(KB)
⚠️ 注意:
nice / renice(CPU 优先级)控制CPU 调度优先级,不是硬限制。
nice -n 10 ./app
renice -n 5 -p 1234
-20 最高优先级19 最低timeout(时间限制)限制进程运行时间。
timeout 30s ./app
超时后默认发送 SIGTERM,可指定信号:
timeout -s KILL 10s ./app
用于限制 CPU、内存、IO
mkdir /sys/fs/cgroup/mygroup
echo 500000 > /sys/fs/cgroup/mygroup/cpu.max # 0.5 CPU
echo 200M > /sys/fs/cgroup/mygroup/memory.max
echo 1234 > /sys/fs/cgroup/mygroup/cgroup.procs
✅ 适合:
如果你用 systemd 管理服务:
[Service]
MemoryMax=200M
CPUQuota=50%
TasksMax=100
LimitNOFILE=1024
然后:
systemctl daemon-reload
systemctl restart myapp
✅ 最稳定、最常用
docker run \
--memory=200m \
--cpus=0.5 \
--pids-limit=100 \
myimage
✅ 适合:
#include <sys/resource.h>
setrlimit(RLIMIT_CPU, &(struct rlimit){10, 10});
Python:
import resource
resource.setrlimit(resource.RLIMIT_CPU, (10, 10))
| 场景 | 推荐方式 |
|---|---|
| 临时命令 | ulimit / timeout |
| 长期服务 | systemd |
| 强隔离 | cgroups / Docker |
| 开发控制 | setrlimit |
如果你愿意,可以告诉我:
我可以直接给你可复制的配置。