在日常开发和运维中,遇到系统变慢、CPU 飙高、内存异常等问题时,快速定位瓶颈非常关键。本文整理了一组最常用且实战价值高的 Linux 性能分析工具,重点讲清:用来干什么 + 怎么用 + 看什么指标。
一、top:整体资源快速扫描
作用:查看系统整体运行状态(CPU、内存、负载、进程)
常用命令:
top
重点关注:
实战建议:
CPU 高 → 按 P 排序找高 CPU 进程
内存高 → 按 M 排序找大内存进程
二、vmstat:系统级性能快照
作用:查看 CPU、内存、IO、上下文切换等整体情况
常用命令:
vmstat 120
(每 1 秒采样,共 20 次)
重点关注:
实战判断:
r 高 → CPU 瓶颈
wa 高 → IO 瓶颈
si/so 不为 0 → 内存不够
三、dstat:更直观的综合监控
作用:vmstat 的增强版,实时展示 CPU / 内存 / IO / 网络
常用命令:
dstat
推荐用法:
dstat -cdlmn
含义:
-c CPU
-d 磁盘
-l 负载
-m 内存
-n 网络
优点:
信息更直观
多维度同时展示
比 vmstat 更适合人看
四、pidstat:定位“具体哪个进程有问题”
作用:查看某个进程维度的 CPU / 内存 / IO
常用命令:
查看 CPU:
pidstat 1
查看 IO:
pidstat -d 1
查看内存:
pidstat -r 1
重点场景:
五、iostat:磁盘 IO 分析核心工具
作用:分析磁盘性能瓶颈
常用命令:
iostat -x1
重点指标:
实战判断:
await > 10ms → 磁盘延迟高
%util ≈ 100% → IO 已打满
六、Arthas:Java 线上问题神器
作用:专门用于 Java 应用的诊断工具(阿里开源)
典型能力:
查看方法调用耗时
实时 trace 方法执行
排查死锁、线程问题
热点方法分析
常用命令示例:
trace com.xxx.Service methodNamewatch com.xxx.Service methodName '{params, returnObj}'适用场景:
Java 服务 CPU 飙高
接口慢但查不到原因
想看方法内部执行情况
七、排查流程(重点)
遇到性能问题,建议按这个顺序走:
1. 先看整体
topvmstat 1
判断:
2. 再定位进程
pidstat
找到“谁”在消耗资源
3. 如果是 IO 问题
iostat -x1
确认磁盘是否瓶颈
4. 如果是 Java 应用
arthas
深入到方法级分析
总结
这套工具组合可以覆盖 90% 的线上问题:
| 工具 | 作用 |
|---|
| top | 快速看整体 |
| vmstat | 判断系统瓶颈类型 |
| dstat | 多维度实时监控 |
| pidstat | 定位具体进程 |
| iostat | 分析磁盘 IO |
| arthas | Java 深度诊断 |
如果你只记住一件事:
👉 先看整体(top/vmstat) → 再找进程(pidstat) → 最后深入分析(iostat/arthas)
这就是一套完整的排查思路。
一个写了10+年一线程序员。
深耕性能调优与大数据平台,也热爱折腾各种新技术。期待与你交流,一起技术进阶。
喜欢的关注我,让技术之路走得更稳、更快。