
系统响应变慢,到底该从哪里下手排查?CPU、内存、磁盘 I/O、网络,每个维度都对应一堆工具。本文把 Linux 性能分析常用的四大类工具做了梳理,覆盖从快速定位到深入剖析的完整排查链路。
性能分析全景图
性能分析可以从四个维度入手:
┌─────────────────────────────────────────────────┐
│ 性能分析工具全景 │
├─────────────┬─────────────┬───────────┬─────────┤
│ CPU │ 内存 │ 磁盘IO │ 网络 │
│ (计算力) │ (存储容量) │ (存储IO) │ (通信) │
└─────────────┴─────────────┴───────────┴─────────┘
一、CPU 性能工具
核心指标:CPU 使用率、上下文切换、平均负载、Cache 命中率。
| 工具 |
功能 |
常用场景 |
top |
实时查看系统整体 CPU、内存及进程资源 |
快速定位哪个进程吃 CPU |
htop |
top 的增强版,交互界面更友好 |
日常系统监控 |
vmstat |
虚拟内存统计,含上下文切换、运行队列 |
查看整体负载和切换频率 |
mpstat |
统计每个 CPU 核心的使用率 |
判断多核 CPU 负载是否均衡 |
pidstat |
查看每个进程的 CPU 使用率(用户态/内核态) |
精确定位进程 CPU 消耗 |
sar |
系统活动报告,可收集历史数据 |
回溯历史性能问题 |
perf |
性能事件剖析,函数级热点分析 |
深入分析 CPU 消耗在哪里 |
常用命令:
# 实时查看 CPU 使用
top
# 每秒采样一次,共5次,查看上下文切换等
vmstat 1 5
# 查看每个 CPU 核心的使用情况
mpstat -P ALL 1
# 查看每个进程的 CPU 使用(每秒刷新)
pidstat -u 1
# 查看所有 CPU 的中断统计
cat /proc/interrupts
二、内存性能工具
核心指标:已用/可用内存、进程内存、SWAP、缺页异常。
| 工具 |
功能 |
常用场景 |
free |
查看系统整体内存使用 |
快速看内存够不够 |
vmstat |
虚拟内存统计,si/so 可观察交换情况 |
判断是否在使用 swap |
top / htop |
查看进程级内存使用 |
定位哪个进程吃内存 |
ps |
进程快照,含 VSZ/RSS |
脚本化检查内存 |
pidstat -r |
统计进程内存使用 |
观察进程内存变化趋势 |
pmap |
查看进程内存映射详情 |
分析进程内存分布 |
slabtop |
查看内核 slab 分配器使用情况 |
内核内存泄漏排查 |
/proc/meminfo |
查看详细内存信息 |
获取全部内存指标 |
常用命令:
# 查看内存使用(人类可读)
free -h
# 查看进程内存使用(按内存排序)
top # 按 M 键切换内存排序
# 查看某个进程的内存映射
pmap -x 1234
# 查看内核 slab 使用
slabtop
# 每秒查看内存和 swap 变化
vmstat 1
三、磁盘 I/O 性能工具
核心指标:IOPS、吞吐量、响应时间、使用率。
| 工具 |
功能 |
常用场景 |
df |
查看磁盘空间使用情况 |
磁盘是不是快满了 |
du |
统计目录/文件大小 |
找到哪个目录占用空间最多 |
iostat |
查看磁盘 I/O 统计,含使用率、吞吐量 |
判断磁盘是否成为瓶颈 |
iotop |
实时显示进程 I/O 使用情况 |
谁在疯狂读磁盘 |
pidstat -d |
统计进程级 I/O |
分析单个进程的磁盘读写 |
sar -d |
查看磁盘 I/O 历史统计 |
回溯 I/O 峰值 |
dd |
简单的磁盘读写速度测试 |
快速压测磁盘性能 |
常用命令:
# 查看磁盘空间
df -h
# 查看当前目录大小
du -sh .
# 每秒查看磁盘 I/O(-x 显示扩展信息)
iostat -xz 1
# 实时查看哪个进程读/写磁盘最多
iotop
# 测试磁盘写速度
dd if=/dev/zero of=test bs=1M count=1024 oflag=direct
四、网络性能工具
网络性能工具重点围绕吞吐量、连接数、丢包和延迟这几项指标展开。
| 工具 |
功能 |
常用场景 |
ifconfig / ip addr |
查看网卡配置和状态 |
查看网卡信息、IP 地址 |
sar -n DEV |
统计网络接口流量 |
统计网卡吞吐量 |
netstat |
查看网络连接、路由、接口统计 |
查看连接状态 |
ss |
socket 统计,可作为 netstat 替代 |
高效查看连接 |
iftop |
实时监控网络流量,按连接展示 |
找到谁在占带宽 |
nethogs |
按进程统计网络流量 |
定位哪个进程用网最多 |
ping |
测试网络连通性和延迟 |
判断网络通不通、延迟多少 |
traceroute |
追踪路由路径 |
确认网络卡在哪一跳 |
tcpdump |
网络抓包分析 |
深入分析协议问题 |
ethtool |
查看网卡驱动和硬件配置 |
查看网卡速度、驱动信息 |
常用命令:
# 查看网卡信息
ip addr show
# 查看所有 TCP 连接
ss -tlnp # 监听的 TCP 端口
ss -tanp # 所有 TCP 连接
# 实时查看网络流量(需安装)
iftop
# 按进程查看网络流量(需安装)
nethogs
# 抓包分析
tcpdump -i eth0 -w capture.pcap
tcpdump -i eth0 port 80 -n
# 测试网络延迟
ping -c 10 192.168.1.1
# 测试带宽
iperf3 -s # 服务端
iperf3 -c server_ip # 客户端
五、性能分析思路
🔍 从宏观到微观:
- 第一步:整体概览 →
top / vmstat
- 第二步:定位维度 → CPU 高?内存紧?IO 忙?网络卡?
- 第三步:定位进程 →
pidstat / iotop / nethogs
- 第四步:深入分析 →
perf / strace / tcpdump / 火焰图
- 第五步:优化验证 → 修改后再测,对比前后数据
💡 常见对应关系:
| 现象 |
可能的瓶颈 |
先看什么工具 |
| 系统响应慢 |
CPU / 内存 / IO |
top → vmstat |
| CPU 使用率高 |
计算密集型进程 |
top → pidstat → perf |
| CPU iowait 高 |
磁盘 I/O 瓶颈 |
iostat → iotop |
| 内存不足 |
内存泄漏 / 缓存不足 |
free → top → slabtop |
| 网络慢 |
带宽 / 丢包 / 延迟 |
iftop → ping → tcpdump |
📚 驱动调试系列:
- 第01篇:printk 内核打印
- 第02篇:dynamic debug 动态打印
- 第03篇:内核调用栈调试
- 第04篇:休眠唤醒 standby 调试
- 第05篇:access_ok 地址检测
- 第06篇:分支预测优化
- 第07篇:procfs 虚拟文件系统
- 第08篇:debugfs 调试文件系统
- 第09篇:devmem 直接读写寄存器
- 第10篇:Linux 性能工具大全 → 当前
- 第11篇:CPU 使用率详解
- 第12篇:perf 性能优化
|