别再只会top了!CPU监控的18种姿势全解析

2026-01-06 13:37   41   0  

前言:为什么只会top远远不够?

作为一名有15年经验的老运维,我必须承认:只会用top命令看CPU,就像医生只会用体温计量病人一样基础。当系统出现性能问题时,你需要的是“CT扫描仪”,而不是“体温计”。

今天,我将带你解锁CPU监控的18种姿势,让你从“监控小白”升级为“诊断专家”。

一、基础监控:从top到htop的进化

1. 经典的top命令 - 你的“体温计”

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

核心指标解读:

  • us:用户空间CPU使用率 - 你的应用程序在忙什么
  • sy:内核空间CPU使用率 - 操作系统在忙什么
  • wa:IO等待时间 - CPU在等硬盘/网络的时间
  • load average:1分钟、5分钟、15分钟平均负载

使用技巧:

top -c            # 显示完整命令行
top -p 1234       # 只监控特定PID
top -d 2          # 每2秒刷新一次
top -u www-data   # 只监控特定用户的进程

2. htop - top的现代化升级版

htop  # 需要先安装:yum install htop 或 apt install htop

为什么比top更强大:

  • 彩色界面,直观展示CPU使用情况
  • 支持鼠标操作,可以直接选择进程
  • 树状视图,清晰展示父子进程关系
  • 垂直和水平滚动,查看更多信息

二、进程级监控:找到真正的“罪魁祸首”

3. pidstat - 按进程统计CPU

pidstat 1 5  # 每1秒统计一次,共5次
# 输出:%usr %system %guest %CPU CPU

4. ps auxf - 进程树状展示

ps auxf --forest  # 树状显示进程关系

5. pstree - 可视化进程树

pstree -p  # 显示进程树,包含PID

三、核心级监控:深入CPU内部

6. mpstat - 多核CPU详细统计

mpstat -P ALL 1  # 查看每个CPU核心的使用率
# 关键字段:
# %usr   %nice   %sys   %iowait   %irq   %soft   %steal   %guest   %idle

7. lscpu - CPU架构信息

lscpu  # 查看CPU的完整信息
# 包括:架构、核心数、线程数、缓存大小、NUMA信息等

四、高级统计:了解CPU的“工作状态”

8. vmstat - 虚拟内存和CPU统计

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

关键指标:

  • r:运行队列长度 - CPU有多忙
  • in:每秒中断数
  • cs:每秒上下文切换次数

9. sar - 系统活动报告器

# 安装:yum install sysstat 或 apt install sysstat
sar -u 1 3  # CPU使用率,每1秒,共3次
sar -q 1 3  # 运行队列长度和负载平均值

五、性能计数器:CPU硬件的“仪表盘”

10. perf stat - 硬件事件统计

perf stat -e cycles,instructions,cache-misses,branch-misses ls

11. turbostat - 监控CPU频率和C状态

turbostat  # 需要root权限
# 显示:CPU频率、温度、功耗、C状态停留时间

六、可视化工具:让数据“说话”

12. glances - 全能监控仪表盘

glances  # 安装:pip install glances

特点: 支持Web界面、API接口、颜色编码警告

13. atop - 高级交互式监控

atop  # 记录历史数据,支持回放分析

七、容器环境监控

14. cAdvisor - 容器资源监控

# 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

15. docker stats

docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

八、内核级诊断工具

16. perf top - 实时性能分析

perf top  # 类似top,但显示的是函数级CPU使用

17. bpftrace - eBPF动态追踪

# 追踪CPU调度事件
bpftrace -e 'tracepoint:sched:sched_switch { printf("%s -> %s\n", args->prev_comm, args->next_comm); }'

18. trace-cmd - Ftrace前端工具

trace-cmd record -e sched_switch  # 记录调度事件
trace-cmd report  # 查看报告

实战场景:如何选择合适的工具?

场景1:CPU使用率突然飙升

# 第一步:快速定位(5秒内)
htop

# 第二步:深入分析(30秒内)
pidstat -u 1 10

# 第三步:内核级诊断(如果需要)
perf top -p <PID>

场景2:系统响应变慢,但CPU使用率不高

# 检查IO等待和上下文切换
vmstat 1
# 如果%wa高 -> 存储瓶颈
# 如果cs值非常高 -> 上下文切换过多

场景3:多核CPU负载不均衡

# 查看每个核心的使用情况
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

添加到crontab

# 每10分钟记录一次
*/10 * * * * /root/monitor_cpu.sh >> /var/log/cpu_monitor.log

今日学习总结

关键知识点

  1. 理解CPU监控的三个层次

  • 系统级:top, htop, glances
  • 进程级:pidstat, ps
  • 硬件级:perf, turbostat

核心指标

  • %user/%system:CPU在干什么
  • load average:系统有多忙
  • 运行队列长度:等待CPU的进程数
  • 上下文切换:切换开销

工具选择矩阵

快速概览:htop
历史分析:sar
深度诊断:perf
容器环境:cAdvisor
实时追踪:bpftrace


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。