在 Ubuntu(Linux)里限制进程资源,常见做法有 cgroup / systemd 资源控制、ulimit、nice/CPUsets、以及容器方式。下面按“最常用 → 最专业”介绍。
限制当前 shell 及其子进程的资源:
ulimit -u 500 # 最多 500 个进程
ulimit -v 1048576 # 虚拟内存 1GB (KB)
ulimit -t 60 # CPU 时间 60 秒
ulimit -f 100000 # 文件大小 100MB
查看所有限制:
ulimit -a
✅ 适合:防止程序失控
❌ 不适合:精确控制 CPU / IO
systemd-run(最简单、现代)Ubuntu 默认使用 systemd:
systemd-run \
--scope \
-p MemoryMax=500M \
-p CPUQuota=50% \
./my_program
常用参数:
MemoryMax=500MCPUQuota=50%TasksMax=100✅ 不需要写服务文件
✅ 立刻生效
适合长期运行程序:
[Service]
ExecStart=/opt/app/run.sh
MemoryMax=1G
CPUQuota=80%
TasksMax=200
sudo systemctl daemon-reload
sudo systemctl restart myapp
✅ 最稳定方案
✅ 服务器首选
sudo mkdir /sys/fs/cgroup/mygroup
echo 500M | sudo tee /sys/fs/cgroup/mygroup/memory.max
echo 100000 > /sys/fs/cgroup/mygroup/cpu.max
echo $PID | sudo tee /sys/fs/cgroup/mygroup/cgroup.procs
适合:
nice -n 10 ./app
cpulimit -p PID --limit=30
taskset -c 0,1 ./app
docker run -it --memory=500m --cpus=1 ubuntu
✅ 完全隔离
✅ 生产推荐
| 场景 | 推荐方式 |
|---|---|
| 临时跑程序 | systemd-run |
| 服务长期运行 | systemd service |
| 多进程精确控制 | cgroup |
| 简单防失控 | ulimit |
| 完全隔离 | Docker |
如果你能说明 具体限制什么(CPU / 内存 / 进程数)和使用场景(桌面 / 服务器),我可以给你更精准的命令。