在 Linux 下限制进程资源,常见做法有以下几种,按使用场景从简单到专业说明:
ulimit(限制当前 shell 及子进程)ulimit -u 100 # 最多 100 个进程
ulimit -v 524288 # 虚拟内存 512MB(单位 KB)
ulimit -f 10240 # 文件最大 10MB
ulimit -n 1024 # 最多打开 1024 个文件
⚠️ 只对当前 shell 及其子进程有效,重启失效。
nice / renice(限制 CPU 优先级)nice -n 10 ./app
renice -n 15 -p 1234
只影响调度优先级,不是硬限制。
timeout(限制运行时间)timeout 60 ./app
超过 60 秒自动杀死进程。
cpulimit(限制 CPU 使用率)cpulimit -p 1234 --limit 30
限制进程最多用 30% CPU。
[Service]
MemoryMax=512M
CPUQuota=50%
TasksMax=100
LimitNOFILE=1024
然后:
systemctl daemon-reload
systemctl restart myapp
✅ 稳定、持久、生产环境首选
# cgroup v2 示例
mkdir /sys/fs/cgroup/mygroup
echo 512M > /sys/fs/cgroup/mygroup/memory.max
echo 100000 > /sys/fs/cgroup/mygroup/cpu.max
echo 1234 > /sys/fs/cgroup/mygroup/cgroup.procs
✅ 容器(Docker)底层就是它
❌ 配置较复杂
docker run -m 512m --cpus=1.5 myimage
✅ 资源、文件系统、网络全隔离
| 场景 | 推荐方式 |
|---|---|
| 临时测试 | ulimit / timeout |
| 后台服务 | systemd |
| 多进程隔离 | cgroups |
| 完整隔离 | Docker / Podman |
如果你能说一下:
我可以给你更精确的命令示例。