限制进程的 CPU 使用率,常见做法分为操作系统级限制和程序/容器级限制两类。下面按使用场景给你总结。
cpulimit(最直观,限制百分比)适合临时限制某个已存在进程:
cpulimit -p 12345 --limit 30
表示把 PID 为 12345 的进程限制在 30% CPU。
也可以按命令启动:
cpulimit -l 20 -- python train.py
✅ 优点:简单
❌ 缺点:不保证公平,可能被系统调度打破
nice / renice(调优先级)降低优先级,让系统“少照顾”它:
nice -n 19 python task.py
或对已有进程:
renice -n 19 -p 12345
✅ 不影响峰值,只影响竞争时的优先级
❌ 不能硬性限制 CPU 百分比
cgroups(最强大,生产推荐)Linux 原生资源控制机制。
cgroups v1 示例:
cgcreate -g cpu:/lowcpu
echo 50000 > /sys/fs/cgroup/cpu/lowcpu/cpu.cfs_quota_us
echo 100000 > /sys/fs/cgroup/cpu/lowcpu/cpu.cfs_period_us
cgexec -g cpu:lowcpu python task.py
→ 限制为 50% CPU
Docker 也基于 cgroups:
docker run --cpus=1.5 myimage
systemd 限制服务如果是系统服务:
[Service]
CPUQuota=50%
然后:
systemctl daemon-reexec
systemctl restart myservice
只能设处理器亲和性(绑核),不能限百分比。
$proc = Get-Process myapp
$proc.ProcessorAffinity = 0x3 # 只用 CPU0、CPU1
开发中可用 Job Object API 限制 CPU 时间。
docker run --cpus=0.5
resources:
limits:
cpu: "500m"
sleep| 场景 | 推荐 |
|---|---|
| 临时限一下 | cpulimit |
| 后台任务 | nice |
| 服务/生产 | systemd / cgroups |
| 容器 | Docker / K8s |
| 精确控制 | cgroups |
如果你能告诉我:
我可以给你直接可用的命令。