作为一名有15年经验的老运维,我必须承认:只会用top命令看CPU,就像医生只会用体温计量病人一样基础。当系统出现性能问题时,你需要的是“CT扫描仪”,而不是“体温计”。
今天,我将带你解锁CPU监控的18种姿势,让你从“监控小白”升级为“诊断专家”。
top - 14:30:00 up 60 days, 3:15, 2 users, load average: 1.25, 1.10, 1.05
Tasks: 356 total, 1 running, 355 sleeping, 0 stopped, 0 zombie
%Cpu(s): 25.3 us, 8.7 sy, 0.0 ni, 65.5 id, 0.3 wa, 0.0 hi, 0.2 si, 0.0 st
核心指标解读:
使用技巧:
top -c # 显示完整命令行
top -p 1234 # 只监控特定PID
top -d 2 # 每2秒刷新一次
top -u www-data # 只监控特定用户的进程
htop # 需要先安装:yum install htop 或 apt install htop
为什么比top更强大:
pidstat 1 5 # 每1秒统计一次,共5次
# 输出:%usr %system %guest %CPU CPU
ps auxf --forest # 树状显示进程关系
pstree -p # 显示进程树,包含PID
mpstat -P ALL 1 # 查看每个CPU核心的使用率
# 关键字段:
# %usr %nice %sys %iowait %irq %soft %steal %guest %idle
lscpu # 查看CPU的完整信息
# 包括:架构、核心数、线程数、缓存大小、NUMA信息等
vmstat 1 # 每1秒刷新
# procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
# r b swpd free buff cache si so bi bo in cs us sy id wa st
关键指标:
# 安装:yum install sysstat 或 apt install sysstat
sar -u 1 3 # CPU使用率,每1秒,共3次
sar -q 1 3 # 运行队列长度和负载平均值
perf stat -e cycles,instructions,cache-misses,branch-misses ls
turbostat # 需要root权限
# 显示:CPU频率、温度、功耗、C状态停留时间
glances # 安装:pip install glances
特点: 支持Web界面、API接口、颜色编码警告
atop # 记录历史数据,支持回放分析
# Docker容器内部监控
docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 --detach=true --name=cadvisor google/cadvisor:latest
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
perf top # 类似top,但显示的是函数级CPU使用
# 追踪CPU调度事件
bpftrace -e 'tracepoint:sched:sched_switch { printf("%s -> %s\n", args->prev_comm, args->next_comm); }'
trace-cmd record -e sched_switch # 记录调度事件
trace-cmd report # 查看报告
# 第一步:快速定位(5秒内)
htop
# 第二步:深入分析(30秒内)
pidstat -u 1 10
# 第三步:内核级诊断(如果需要)
perf top -p <PID>
# 检查IO等待和上下文切换
vmstat 1
# 如果%wa高 -> 存储瓶颈
# 如果cs值非常高 -> 上下文切换过多
# 查看每个核心的使用情况
mpstat -P ALL 1
# 如果某些核心100%,某些0% -> 应用需要绑核优化
#!/bin/bash
# monitor_cpu.sh
echo "====== $(date) ======"
echo "1. 整体负载:"
uptime
echo -e "\n2. 核心使用率:"
mpstat -P ALL 1 1 | tail -n +4
echo -e "\n3. 进程TOP 10:"
ps aux --sort=-%cpu | head -11
echo -e "\n4. 运行队列:"
vmstat 1 2 | tail -n 1
# 每10分钟记录一次
*/10 * * * * /root/monitor_cpu.sh >> /var/log/cpu_monitor.log
理解CPU监控的三个层次:
核心指标:
工具选择矩阵:
快速概览:htop
历史分析:sar
深度诊断:perf
容器环境:cAdvisor
实时追踪:bpftrace