温馨提示×

怎样限制进程cpu使用

小樊
46
2026-09-24 20:21:52
栏目: 编程语言

限制进程的 CPU 使用率,常见做法分为操作系统级限制和程序/容器级限制两类。下面按使用场景给你总结。


一、Linux 下常用方法

1. cpulimit(最直观,限制百分比)

适合临时限制某个已存在进程:

cpulimit -p 12345 --limit 30

表示把 PID 为 12345 的进程限制在 30% CPU。

也可以按命令启动:

cpulimit -l 20 -- python train.py

✅ 优点:简单
❌ 缺点:不保证公平,可能被系统调度打破


2. nice / renice(调优先级)

降低优先级,让系统“少照顾”它:

nice -n 19 python task.py

或对已有进程:

renice -n 19 -p 12345

✅ 不影响峰值,只影响竞争时的优先级
❌ 不能硬性限制 CPU 百分比


3. 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

4. systemd 限制服务

如果是系统服务:

[Service]
CPUQuota=50%

然后:

systemctl daemon-reexec
systemctl restart myservice

二、Windows 下

1. 任务管理器(不推荐)

只能设处理器亲和性(绑核),不能限百分比。

2. PowerShell(Win10+)

$proc = Get-Process myapp
$proc.ProcessorAffinity = 0x3  # 只用 CPU0、CPU1

3. Windows Job Objects(程序级)

开发中可用 Job Object API 限制 CPU 时间。


三、容器 / 云环境

  • Docker
    docker run --cpus=0.5
    
  • Kubernetes
    resources:
      limits:
        cpu: "500m"
    

四、开发层面限制(程序自己控)

  • 定时 sleep
  • 控制线程数
  • 使用异步 + 限流
  • 计算任务分片

五、怎么选?

场景 推荐
临时限一下 cpulimit
后台任务 nice
服务/生产 systemd / cgroups
容器 Docker / K8s
精确控制 cgroups

如果你能告诉我:

  • 操作系统
  • 是否是服务 / 脚本 / 容器
  • 想限制到多少 CPU

我可以给你直接可用的命令。

0 踩