在 Ubuntu(Linux)中限制进程资源,常用的方法有以下几种,按使用场景从简单到专业排列:
ulimit(临时、针对 shell 及子进程)适合:当前终端会话、测试用
# 查看当前限制
ulimit -a
# 限制最大内存(示例:500MB)
ulimit -v 512000
# 限制最大 CPU 时间(秒)
ulimit -t 60
# 限制最大打开文件数
ulimit -n 1024
⚠️ 只对当前 shell 及其子进程有效,重启失效。
systemd 限制服务资源(推荐、生产环境)适合:后台服务 / 守护进程
编辑 service 文件:
sudo systemctl edit nginx
添加:
[Service]
MemoryMax=512M
CPUQuota=50%
TasksMax=100
应用:
sudo systemctl daemon-reload
sudo systemctl restart nginx
常用参数:
MemoryMax:最大内存CPUQuota:CPU 使用上限(如 50% = 半个核)IOWeight:磁盘 IO 权重cgroups(精细控制)适合:多进程、容器级隔离
sudo mkdir /sys/fs/cgroup/mygroup
echo 512M | sudo tee /sys/fs/cgroup/mygroup/memory.max
echo $PID | sudo tee /sys/fs/cgroup/mygroup/cgroup.procs
cpulimit(限制已运行进程 CPU)适合:临时限制某个 PID
sudo apt install cpulimit
sudo cpulimit -p 1234 -l 30
限制 PID 1234 最多用 30% CPU
nice / renice(调整优先级)适合:不是硬限制,而是优先级
nice -n 10 ./program
renice -n 15 -p 1234
数值越大,优先级越低
docker(进程级资源隔离)docker run -m 512m --cpus=1.5 myimage
| 场景 | 推荐方式 |
|---|---|
| 临时测试 | ulimit / cpulimit |
| 系统服务 | systemd |
| 多进程隔离 | cgroups |
| 容器 | Docker |
如果你能说明:
我可以给你更精确的命令。