sudo yum install -y golanggo get github.com/uber-common/cpustatsudo cpustatsudo cpustat -c 0,1sudo cpustat -p <PID>sudo cpustat -hsudo cpustat -c 0,1 cpu_stats.txt| 观测现象 | 可能原因 | 建议动作 |
|---|---|---|
| %usr 或 %sys 持续偏高 | 用户态/内核态计算密集 | 优化应用算法与 SQL;减少系统调用与锁竞争;必要时用 perf 做热点函数分析 |
| iowait 高 | 磁盘/存储瓶颈 | 核查 I/O 队列与设备健康;优化 SQL/索引与批量大小;考虑更快存储或分层缓存 |
| %idle 很低且负载高 | CPU 饱和 | 扩容 vCPU/实例规格;对长时任务限流/错峰;优化热点进程 |
| prun 高、pblock 高 | 运行队列拥挤、进程被 I/O 阻塞 | 降低并发或拆分任务;优化 I/O 路径;检查存储与网络延迟 |
| 单核长期高占用 | 负载不均衡/亲和性不当 | 使用 taskset 做 CPU 亲和性;调整调度策略;考虑绑核或重平衡工作负载 |
| 短时尖峰难捕捉 | 采样粒度不够 | 缩短采样间隔(如 -c 1 5 每秒刷新、共 5 次),结合日志回溯定位触发源 |
| 以上动作需结合业务特点验证,先小流量演练再推广,避免引入回归风险。 |
sudo cpustat -c 0,1 cpu_stats.txt#!/bin/bash
out="/var/log/cpu_usage.log"
ts=$(date '+%F %T')
cpustat -c 1 1 | awk -v t="$ts" 'NR>1 {print $0, t}' >> "$out"
sudo chmod +x /usr/local/bin/monitor_cpu.shcrontab -e 加入 * * * * * /usr/local/bin/monitor_cpu.shsudo systemctl status crondcpu=$(cpustat -c 1 1 | tail -n1 | awk '{print $3}')
if [[ $cpu > 80 ]]; then
echo "CPU usage high: $cpu%" | mail -s "High CPU Alert" you@example.com
fi