如何通过在CentOS系统中使用cpustat精确控制CPU使用率,以优化系统性能?
- 内容介绍
- 文章标签
- 相关推荐
一、常见痛点:CPU 资源失控导致程序性能下降
CPU 使用率飙升常常会出现以下问题:
- 关键业务响应变慢,使用者体验受损。
- 进程之间争抢 CPU,导致服务不稳定。其实,
- 缺乏实时监控手段。难还有时发现异常进程,话说回来,
- 盲目调优导致资源浪费或程序崩溃。说起来,
针对这些痛点,这篇文章提供一套基于 cpustat和 cpulimit的完整方法。让你能够精准控制 CPU 使用率提高 CentOS 程序的整体性能。
二、环境准备:安装必备工具
1. 安装 sysstat
# yum install -y sysstat
# systemctl enable --now sysstat
2. 安装 cpulimit
# yum install -y epel-release
# yum install -y cpulimit
三、使用 cpustat 实时监控 CPU 使用情况
1. 基础实时监控
# cpustat -w
默认每秒刷新一次展示每个 CPU 主要的使用者态、程序态、空闲等百分比。
2. 自定义刷新间隔与持续时间
# cpustat -i 2 -s 10
上述命令将刷新间隔设为 2 秒,持续采样 10 次适合短时诊断。
3. 只监控特定主要
# cpustat -c 0。2
只显示 CPU0 与 CPU2 的使用情况,帮助定位多核环境下的热点。
4. 将结果写入文件以便后续分析
# cpustat -c cpu_usage_$.txt
5. 与其他工具联动获取更全面的性能视图
# sar -u 5 5 # 每 5 秒输出一次 CPU 使用统计,共采样 5 次
# top -b -n 1 # 快速查看占用最高的进程
四、使用 cpulimit 精准限制高消耗进程的 CPU 使用率
1. 限制单个进程
# cpulimit -p 1234 -l 50
将 PID 为 1234 的进程限制在不超过 50% 的 CPU 使用率。
2. 限制通过名称匹配的进程
# cpulimit -e /usr/bin/python -l 30
3. 后台持续运行限制
# cpulimit -b -p 1234 -l 40
⚠️ 注意事项:
-
PIDs 会变化:AWS/VM 中重启后需要重新获取 PID。可结合
/proc/*/cmdline/pgrep.
-
Cpulimit 并非硬件层面的限速:Cpulimit 基于信号暂停/恢复进程,在极端负载下仍可能出现瞬时峰值。
-
SYSTEMD 服务化:Simplify by creating a unit file:
Description=Limit MyApp CPU
ExecStart=/usr/bin/cpulimit -b -p %i -l %I
WantedBy=multi-user.target
五、把监控与限制结合起来:闭环调整流程
a) 定时收集 CPUSTAT 数据
# crontab -e
*/5 * * * * /usr/bin/cpustat -c cpu_usage_$.txt
b) 分析报告定位高占用进程
/proc/*/cmdline/pgrep.
Description=Limit MyApp CPU
ExecStart=/usr/bin/cpulimit -b -p %i -l %I
WantedBy=multi-user.target
# crontab -e
*/5 * * * * /usr/bin/cpustat -c cpu_usage_$.txt
- 使用 提取占用>70% 的记录。 说到示例脚本,
70 {print $0}' "$FILE"
b) 自动触发 cpulimit 限制
Create a wrapper script that reads latest report and applies limits:
- Cron+脚本实现闭环自动化:*每分钟检测一次如果某进程持续高占用则自动限速。
六、进一步调整建议
- Tune kernel parameters: 对 I/O 密集型服务降低 /proc/sys/vm/swappiness=10 .
- E‑mail/Slack 通知: 将关键阈值通过 推送到运维渠道。
- Docker/K8s 环境: 在容器启动参数中加入 -cpu-quota / --cpu-period 。与 host 层面的 Cpulimit 配合使用,实现多层次限流。
- A/B 测试代码方法: 利用 CPUSTAT 捕获热点函数调用频率,再结合 perf/sperf 调整算法或缓存策略。
- Liveness Probe 检查: 在程序负载过高时自动重启受影响的服务,以保证业务连续性。
七、验证与回滚:确保安全可逆的调优过程
- 在测试环境先跑相同负载脚本,记录基线指标。- 应用 CPULIMIT 后 跑脚本,对比差异。- 如出现异常,可通过以下命令撤销限制:
renice +0 1234 # 恢复默认 nice 值
八、让 CPUSTAT+CPULIMIT 成为你的“CPU 护航员”
通过上述步骤。你可以从"看不见的高CPU占用" 转变为"可视化+可控"。按理说,从实时监控到精准限速,再到自动化闭环和细粒度调优。这套方案兼顾了LARGE‑SCALE 公司级部署需求和小型服务器日常维护场景。
"掌握了 CPUSTAT 与 CPULIMIT,你就拥有了精细管理 Linux CPU 的钥匙。"
一、常见痛点:CPU 资源失控导致程序性能下降
CPU 使用率飙升常常会出现以下问题:
- 关键业务响应变慢,使用者体验受损。
- 进程之间争抢 CPU,导致服务不稳定。其实,
- 缺乏实时监控手段。难还有时发现异常进程,话说回来,
- 盲目调优导致资源浪费或程序崩溃。说起来,
针对这些痛点,这篇文章提供一套基于 cpustat和 cpulimit的完整方法。让你能够精准控制 CPU 使用率提高 CentOS 程序的整体性能。
二、环境准备:安装必备工具
1. 安装 sysstat
# yum install -y sysstat
# systemctl enable --now sysstat
2. 安装 cpulimit
# yum install -y epel-release
# yum install -y cpulimit
三、使用 cpustat 实时监控 CPU 使用情况
1. 基础实时监控
# cpustat -w
默认每秒刷新一次展示每个 CPU 主要的使用者态、程序态、空闲等百分比。
2. 自定义刷新间隔与持续时间
# cpustat -i 2 -s 10
上述命令将刷新间隔设为 2 秒,持续采样 10 次适合短时诊断。
3. 只监控特定主要
# cpustat -c 0。2
只显示 CPU0 与 CPU2 的使用情况,帮助定位多核环境下的热点。
4. 将结果写入文件以便后续分析
# cpustat -c cpu_usage_$.txt
5. 与其他工具联动获取更全面的性能视图
# sar -u 5 5 # 每 5 秒输出一次 CPU 使用统计,共采样 5 次
# top -b -n 1 # 快速查看占用最高的进程
四、使用 cpulimit 精准限制高消耗进程的 CPU 使用率
1. 限制单个进程
# cpulimit -p 1234 -l 50
将 PID 为 1234 的进程限制在不超过 50% 的 CPU 使用率。
2. 限制通过名称匹配的进程
# cpulimit -e /usr/bin/python -l 30
3. 后台持续运行限制
# cpulimit -b -p 1234 -l 40
⚠️ 注意事项:
-
PIDs 会变化:AWS/VM 中重启后需要重新获取 PID。可结合
/proc/*/cmdline/pgrep.
-
Cpulimit 并非硬件层面的限速:Cpulimit 基于信号暂停/恢复进程,在极端负载下仍可能出现瞬时峰值。
-
SYSTEMD 服务化:Simplify by creating a unit file:
Description=Limit MyApp CPU
ExecStart=/usr/bin/cpulimit -b -p %i -l %I
WantedBy=multi-user.target
五、把监控与限制结合起来:闭环调整流程
a) 定时收集 CPUSTAT 数据
# crontab -e
*/5 * * * * /usr/bin/cpustat -c cpu_usage_$.txt
b) 分析报告定位高占用进程
/proc/*/cmdline/pgrep.
Description=Limit MyApp CPU
ExecStart=/usr/bin/cpulimit -b -p %i -l %I
WantedBy=multi-user.target
# crontab -e
*/5 * * * * /usr/bin/cpustat -c cpu_usage_$.txt
- 使用 提取占用>70% 的记录。 说到示例脚本,
70 {print $0}' "$FILE"
b) 自动触发 cpulimit 限制
Create a wrapper script that reads latest report and applies limits:
- Cron+脚本实现闭环自动化:*每分钟检测一次如果某进程持续高占用则自动限速。
六、进一步调整建议
- Tune kernel parameters: 对 I/O 密集型服务降低 /proc/sys/vm/swappiness=10 .
- E‑mail/Slack 通知: 将关键阈值通过 推送到运维渠道。
- Docker/K8s 环境: 在容器启动参数中加入 -cpu-quota / --cpu-period 。与 host 层面的 Cpulimit 配合使用,实现多层次限流。
- A/B 测试代码方法: 利用 CPUSTAT 捕获热点函数调用频率,再结合 perf/sperf 调整算法或缓存策略。
- Liveness Probe 检查: 在程序负载过高时自动重启受影响的服务,以保证业务连续性。
七、验证与回滚:确保安全可逆的调优过程
- 在测试环境先跑相同负载脚本,记录基线指标。- 应用 CPULIMIT 后 跑脚本,对比差异。- 如出现异常,可通过以下命令撤销限制:
renice +0 1234 # 恢复默认 nice 值
八、让 CPUSTAT+CPULIMIT 成为你的“CPU 护航员”
通过上述步骤。你可以从"看不见的高CPU占用" 转变为"可视化+可控"。按理说,从实时监控到精准限速,再到自动化闭环和细粒度调优。这套方案兼顾了LARGE‑SCALE 公司级部署需求和小型服务器日常维护场景。
"掌握了 CPUSTAT 与 CPULIMIT,你就拥有了精细管理 Linux CPU 的钥匙。"

