可采用四种方法限制Linux进程CPU使用率:一、用cpulimit工具软性控制;二、通过systemd的CPUQuota内核级配额;三、以nice/renice调整调度优先级;四、用cgroups v2手动设置CPU带宽。

如果您在Linux系统中运行某个进程时发现其占用CPU过高,影响了其他任务的正常执行,则需要对该进程的CPU使用率进行限制。以下是几种可行的操作方法:
一、使用cpulimit工具限制进程CPU使用率
cpulimit是一个外部命令行工具,它通过发送SIGSTOP和SIGCONT信号周期性暂停和恢复目标进程,从而实现对CPU使用率的软性控制。该方法无需修改程序源码,适用于已运行的进程。
1、使用包管理器安装cpulimit:对于Debian/Ubuntu系统,执行sudo apt update && sudo apt install cpulimit;对于CentOS/RHEL 8+系统,执行sudo dnf install cpulimit;对于CentOS/RHEL 7系统,需先启用EPEL仓库后执行sudo yum install epel-release && sudo yum install cpulimit。
2、查看目标进程PID:运行ps aux | grep 进程名或pidof 进程名获取PID值。
3、以50% CPU使用率为限运行进程:执行cpulimit -p PID数值 -l 50。
4、后台持续限制已有进程:执行cpulimit -p PID数值 -l 30 -b,其中-b表示后台运行。
二、使用systemd服务配置CPUQuota限制
对于由systemd托管的长期运行服务,可通过修改其unit文件中的CPUQuota参数,实现内核级的CPU时间配额控制。该方式依赖cgroups v1或v2,限制更稳定且不依赖外部工具。
1、确认目标服务名称:运行systemctl list-units --type=service | grep 服务关键词。
2、编辑服务unit文件:执行sudo systemctl edit 服务名.service,在打开的编辑器中输入[Service]换行后输入CPUQuota=75%。
3、重载systemd配置:执行sudo systemctl daemon-reload。
4、重启服务使配置生效:执行sudo systemctl restart 服务名.service。
三、使用nice与renice调整进程静态优先级
nice值影响内核调度器对进程CPU时间片的分配倾向,数值越高(-20至19)表示越低优先级。该方法不设硬性上限,但在CPU争用时能降低目标进程的实际占用比例。
1、启动新进程时指定优先级:执行nice -n 10 命令 参数,例如nice -n 15 python3 heavy_script.py。
2、调整正在运行进程的优先级:执行renice 12 -p PID数值。
3、批量调整同一用户所有进程:执行renice 15 -u 用户名。
四、使用cgroups v2手动创建CPU资源限制组
cgroups v2提供细粒度的CPU带宽控制,支持cpu.max接口设定周期内可使用的微秒数,适用于需要精确配额的场景,且不依赖第三方工具。
1、确认系统启用cgroups v2:运行mount | grep cgroup,输出中应包含type cgroup2。
2、创建控制组目录:执行sudo mkdir -p /sys/fs/cgroup/restricted。
3、设置CPU带宽限制为每100000微秒最多使用30000微秒(即30%):执行echo "30000 100000" | sudo tee /sys/fs/cgroup/restricted/cpu.max。
4、将目标进程加入该组:执行echo PID数值 | sudo tee /sys/fs/cgroup/restricted/cgroup.procs。










