如何使用 cpulimit 限制进程的 CPU 使用率?
美国、香港服务器
如何使用 cpulimit 限制进程的 CPU 使用率?
01-12 来源:
✅ cpulimit 限制进程 CPU 使用率 完整教程(Ubuntu 24.04 实操,最全用法 + 避坑)
你当前的需求是系统掌握 cpulimit 的全部用法,这个工具是 Linux 下限制进程 CPU 使用率的「神器」,✅ 核心优势:只限制 CPU 占用、不杀死进程、不影响进程运行逻辑、不丢失数据,应急处理高 CPU 进程的首选,所有命令可直接复制执行,零基础也能上手,完美适配你之前的高 CPU 进程优化场景!
前置说明:cpulimit 和 Linux 自带的 nice/renice 本质不同:
nice/renice:只是调整进程 CPU优先级,进程能抢占的 CPU 变少,但 CPU 使用率上限还是 100%,高 CPU 进程依然会打满单核心;
cpulimit:强制精准限制进程的 CPU 使用率上限(比如限制为 30%),无论进程多繁忙,CPU 占用都不会超过这个阈值,真正做到「限速」,应急必备!
✅ 一、先安装 cpulimit(Ubuntu 专属安装命令,只需一次)
cpulimit 不是系统自带工具,需要手动安装,命令如下,一键完成:
bash
运行
sudo apt update && sudo apt install -y cpulimit
✅ 安装成功后,直接输入 cpulimit 回车,出现帮助信息即代表安装完成。
✅ 二、cpulimit 核心基础用法(按 PID 限制,最常用,优先掌握)
✅ 前提:先获取要限制进程的「PID」(进程 ID)
使用 cpulimit 的前提,必须先拿到目标进程的 PID,用你熟悉的命令即可,2 种方式任选:
bash
运行
# 方式1:最常用,实时查看所有进程,按CPU排序,直接看PID列
top
# 方式2:精准查询指定进程名的PID(比如redis-server、python)
pgrep 进程名
# 示例:查询redis进程的PID
pgrep redis-server
✔️ 举例:查到 redis-server 的 PID 是 1886,后续所有命令都用这个 PID 做演示。
✅ 核心命令:限制指定 PID 的进程 CPU 使用率【永久记忆】
bash
运行
# 格式:sudo cpulimit -p [进程PID] -l [CPU使用率上限(百分比)]
sudo cpulimit -p 1886 -l 30
✅ 参数说明(核心 2 个参数,无其他复杂配置)
-p : 指定要限制的进程 ID(PID),必填;
-l : limit 的缩写,指定 CPU 使用率的上限百分比,必填,取值范围 1~100;
✅ 效果说明
执行命令后,该进程的 CPU 使用率会被强制限制在 30% 以内,哪怕进程本身疯狂占用 CPU,也绝对不会超过这个阈值,多余的 CPU 资源会被释放给其他服务,进程本身正常运行、业务无中断、数据无丢失。
✅ 三、cpulimit 进阶高频用法(覆盖 99% 的使用场景,全部要会)
✔️ 场景 1:不知道 PID,按【进程名】直接限制(超实用)
如果记不住 PID、或者进程名固定(比如redis-server、python3),直接通过进程名限制,无需查 PID,省去步骤,命令如下:
bash
运行
# 格式:sudo cpulimit -e [进程名] -l [CPU上限]
sudo cpulimit -e redis-server -l 40
✅ 注意:-e 参数后跟的是进程的完整运行名称,和top里COMMAND列显示的一致即可。
✔️ 场景 2:后台运行限制(退出终端也生效,生产环境必用)
默认执行 cpulimit 命令后,终端会被占用,关闭终端则限制失效;在命令末尾加 & 即可让其后台运行,退出终端、断开 SSH 连接,限制依然生效!
bash
运行
# 方式1:按PID后台限制
sudo cpulimit -p 1886 -l 30 &
# 方式2:按进程名后台限制
sudo cpulimit -e redis-server -l 40 &
✔️ 场景 3:开机自启限制(服务器重启后自动生效)
如果进程是开机自启的(比如 redis-server),希望服务器重启后,cpulimit 能自动限制该进程的 CPU,实现永久限制,添加一个系统定时任务即可,命令如下:
bash
运行
# 1. 编辑定时任务
sudo crontab -e
# 2. 在文件末尾添加以下一行(二选一即可)
# 按PID限制(推荐:redis的PID重启后不变)
@reboot cpulimit -p 1886 -l 30 &
# 按进程名限制(稳妥:适配PID变化的情况)
@reboot cpulimit -e redis-server -l 30 &
# 3. 保存退出即可(nano编辑器:Ctrl+O → 回车 → Ctrl+X)
✔️ 场景 4:多核 CPU 的核心限制规则(重中之重,必看!)
很多人有疑问:服务器是 8 核 CPU,限制 30%,是总 CPU 的 30% 还是单核心的 30%?
✅ 给出标准答案:cpulimit 的 -l 参数,默认是按「单个 CPU 核心的使用率」来限制,这是cpulimit的核心规则!
单核服务器:限制 -l 30 → 进程最多用 30% 的 CPU;
多核服务器(比如 8 核):如果进程是多线程(比如 Redis、Java),能跑满多个核心,限制 -l 30 → 每个核心上该进程的占用都≤30%;
特殊需求:如果想限制进程使用「总 CPU 的百分比」,无需额外配置,直接调整 -l 的值即可,比如 8 核服务器想让进程最多用总 CPU 的 20% → 单核心限制为 20*8=160,命令:sudo cpulimit -p 1886 -l 160
✔️ 多核优化建议:Redis 这类多线程服务,在 8 核服务器上,限制 -l 80 即可,既不会占满 CPU,又能充分利用多核资源。
✅ 四、如何解除 / 停止 cpulimit 的 CPU 限制(3 种方法,全部要会)
限制生效后,想要解除限制,让进程恢复正常使用 CPU,有 3 种方法,按需选择,全部安全,不会影响被限制的进程:
✔️ 方法 1:最便捷 - 直接杀死 cpulimit 进程(推荐⭐⭐⭐⭐⭐)
cpulimit 是通过自己的进程去限制目标进程,杀死 cpulimit 进程,限制立即解除,目标进程不受任何影响,命令如下:
bash
运行
# 一键杀死所有cpulimit进程,解除所有限制
sudo pkill cpulimit
✔️ 方法 2:精准杀死 - 按 PID 杀死指定的 cpulimit 进程
如果同时限制了多个进程,只想解除其中一个的限制,先查 cpulimit 的 PID,再杀死:
bash
运行
# 1. 查找cpulimit的进程ID
ps aux | grep cpulimit | grep -v grep
# 2. 杀死指定的cpulimit进程(替换为查到的PID)
sudo kill -9 2000
✔️ 方法 3:终端前台解除 - 直接中断运行
如果cpulimit是前台运行(没有加&,终端被占用),直接在终端按 Ctrl + C,即可停止限制,终端恢复可用。
✅ 五、cpulimit 常用参数大全(完整整理,收藏备用)
整理了cpulimit的所有实用参数,没有冗余,全部是运维中能用到的,按重要性排序,记牢核心 2 个,其他按需查阅:
bash
运行
# 核心必记参数
-p, --pid=N # 指定要限制的进程PID(最常用)
-e, --exe=NAME # 指定要限制的进程名(第二常用)
-l, --limit=N # 指定CPU使用率上限,百分比(必填,核心)
# 实用扩展参数
-b, --background # 后台运行,等价于命令末尾加 &
-q, --quiet # 静默模式,不输出任何日志信息(后台运行时推荐)
-v, --verbose # 详细模式,输出限制的实时日志(调试时用)
✅ 组合示例(推荐生产环境使用)
bash
运行
# 后台静默限制redis进程,CPU上限30%,无日志输出,不占用终端
sudo cpulimit -e redis-server -l 30 -b -q
✅ 六、cpulimit 避坑指南(9 个高频坑,绝对不要踩!)
这是运维的血泪经验,整理了使用cpulimit最容易踩的坑,踩坑轻则限制失效,重则导致进程卡顿 / 无响应,全部记牢,零失误使用:
❌ 坑 1:执行 cpulimit 提示 Permission denied(权限不足)
✅ 解决:必须加 sudo 执行!cpulimit 需要系统权限才能限制进程,普通用户执行无效,所有命令都要加 sudo。
❌ 坑 2:按进程名限制提示 No process found(找不到进程)
✅ 解决:-e 参数后跟的进程名必须是完整的运行名称,比如进程实际是 redis-server,写 redis 就会找不到;用 top 查看COMMAND列的完整名称即可。
❌ 坑 3:限制后进程 CPU 使用率还是超过阈值
✅ 解决:2 个原因:① 多核 CPU 下进程是多线程,限制的是单核心,总 CPU 占比会超;② 输入的 PID 错误,限制到了其他进程,重新核对 PID 即可。
❌ 坑 4:后台运行后,想解除限制但找不到 cpulimit 进程
✅ 解决:用 sudo pkill cpulimit 即可,无论是否看到进程,都能一键杀死。
❌ 坑 5:限制 CPU 的同时,用了taskset绑定核心,导致进程卡顿
✅ 解决:cpulimit和taskset可以一起用,但不要把进程绑定到过少的核心,比如 8 核服务器绑定到 1 个核心,再限制 30%,会导致进程处理能力不足。
❌ 坑 6:给进程设置的 CPU 上限过低(比如 - l 5)
✅ 解决:CPU 上限太低会导致进程处理请求缓慢,服务卡顿,建议至少设置 20% 以上,Redis 这类核心服务建议设置 30%-80%。
❌ 坑 7:重启目标进程后,cpulimit 限制失效
✅ 解决:进程重启后 PID 会变化,按 PID 的限制会失效;改用 按进程名限制 或 添加开机自启任务 即可解决。
❌ 坑 8:以为 cpulimit 会影响进程的内存使用
✅ 结论:cpulimit 只限制 CPU 使用率,对进程的内存、磁盘 IO、网络 IO 无任何影响,放心使用。
❌ 坑 9:用 cpulimit 限制系统核心进程(比如 kworker、systemd)
✅ 解决:不要限制系统核心进程!会导致服务器响应缓慢、系统异常,cpulimit只用来限制业务进程(Redis、Python、Java 等)。
✅ 七、cpulimit 与 renice 的区别(为什么 cpulimit 是应急首选)
你之前学过renice调整进程优先级,这里做一次完整对比,帮你理清使用场景,什么时候用哪个,一目了然:
工具 作用原理 核心效果 适用场景 优先级
cpulimit 强制限制 CPU 使用率上限 CPU 占用绝对不超阈值 应急处理高 CPU 进程、生产环境保命 ⭐⭐⭐⭐⭐(首选)
renice 调整进程 CPU 调度优先级 抢占 CPU 能力变弱,无硬上限 多进程抢资源,让出 CPU 给核心服务 ⭐⭐⭐
✅ 黄金搭配用法:应急时先用 cpulimit 限制 CPU,再用 renice 调低进程优先级,双重保障,既限制了 CPU 上限,又让进程主动让出资源,效果最佳!
bash
运行
# 先限制CPU为30%,再调低优先级为10
sudo cpulimit -p 1886 -l 30 &
sudo renice -n 10 -p 1886
✨ 终极总结:cpulimit 核心命令速记(永久收藏,够用一辈子)
所有用法浓缩为最核心的几条命令,记牢这些,就能应对所有场景,零基础也能玩转 cpulimit:
✔️ 安装
bash
运行
sudo apt install -y cpulimit
✔️ 核心限制(3 种高频写法)
bash
运行
# 按PID限制CPU为30%,后台运行
sudo cpulimit -p 1886 -l 30 -b
# 按进程名限制redis为40%,后台静默运行
sudo cpulimit -e redis-server -l 40 -b -q
# 多核服务器,限制总CPU的20%(8核示例)
sudo cpulimit -p 1886 -l 160 -b
✔️ 解除限制(一键搞定)
bash
运行
sudo pkill cpulimit
✅ 最后补充
cpulimit 是应急优化的最优解,但它只是「治标」,想要彻底解决进程高 CPU 问题,还是要结合之前的步骤:先通过top -Hp PID定位高 CPU 线程,再针对性优化进程的配置 / 代码,最后用cpulimit做兜底限制,这样才能做到「标本兼治」!
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快