在 Ubuntu 中限制进程资源,常见做法有 cgroups / systemd 限制、ulimit、nice/CPULimit、容器化 等方式。下面按“使用场景”给你一个清晰清单。
适合限制 当前 shell 及其子进程
ulimit -u 100 # 最大进程数
ulimit -v 500000 # 虚拟内存(KB)
ulimit -t 60 # CPU 时间(秒)
ulimit -f 10000 # 文件大小(KB)
查看当前限制:
ulimit -a
⚠️ 只对当前会话有效,重启失效。
不直接“限资源”,但降低抢占权
nice -n 10 ./app
renice -n 15 -p 1234
适合老程序、无法改配置的情况
sudo apt install cpulimit
cpulimit -p 1234 --limit 30 # 限制到 30%
适合 服务、后台程序
编辑 service:
[Service]
ExecStart=/opt/app/run.sh
CPUQuota=50%
MemoryMax=512M
TasksMax=100
应用:
sudo systemctl daemon-reload
sudo systemctl restart yourapp
常用参数:
| 参数 | 说明 |
|---|---|
| CPUQuota | CPU 百分比 |
| MemoryMax | 最大内存 |
| TasksMax | 最大线程/进程数 |
| IOWeight | 磁盘 IO 权重 |
✅ 重启依然生效,稳定可靠。
Ubuntu 20.04+ 默认 cgroups v2
创建限制组:
sudo mkdir /sys/fs/cgroup/mygroup
echo 50 > /sys/fs/cgroup/mygroup/cpu.max
echo 536870912 > /sys/fs/cgroup/mygroup/memory.max
echo 1234 > /sys/fs/cgroup/mygroup/cgroup.procs
适合:
docker run \
--cpus=1 \
--memory=512m \
--pids-limit=100 \
myimage
✅ 资源、文件、网络全部隔离。
| 场景 | 推荐方式 |
|---|---|
| 临时测试 | ulimit / cpulimit |
| 后台服务 | systemd |
| 多进程统一限制 | cgroups |
| 完全隔离 | Docker |
如果你能告诉我:
我可以直接帮你写一份可用配置。