阶段 3:监控与看数据(1-2 周)
所属:第二部分 · 分阶段学习
学习目标:压测的同时会看系统资源,知道 CPU、内存、GC、慢 SQL 被谁吃掉了。
预计学习时间:1~2 周。
3.1 为什么要学监控
光压出一堆数字没用。性能测试的价值在于"发现问题 + 定位问题",而定位问题靠的就是监控。压测时你要同时盯三层:操作系统层、JVM 层、数据库层。
3.2 操作系统层(Linux 基础)
| 命令 | 作用 | 关注点 |
|---|---|---|
top/htop | 看 CPU、内存实时占用 | CPU 是否打满、哪个进程吃资源 |
free -h | 看内存剩余 | 剩余内存、swap 使用 |
df -h | 看磁盘空间 | 磁盘是否写满 |
iostat -x 1 | 看磁盘 IO | %util 接近 100% 说明磁盘瓶颈 |
netstat -an/ss | 看网络连接 | TIME_WAIT、连接数是否爆 |
顺便补一点 Linux 常用命令:
cd/ls/tail -f/grep/vim,测试岗天天用。
3.3 JVM 监控(你的主场)
先理解概念:堆内存、栈、GC(垃圾回收)、内存泄漏。
命令行工具:
| 工具 | 作用 |
|---|---|
jps | 看 Java 进程 PID |
jstat -gc <pid> 1000 | 看 GC 频率和耗时 |
jstack <pid> | 看线程栈(排查死锁、线程阻塞) |
jmap -histo <pid> | 看内存对象分布(排查内存泄漏) |
可视化 / 诊断工具:
- JVisualVM:图形化看堆、线程、GC。
- Arthas(阿里开源,强烈推荐):在线诊断,
dashboard、thread、trace、watch直接定位到方法级别。
你要能判断:
- 频繁 Full GC 导致系统周期性卡顿。
- 内存持续上涨不回落 = 内存泄漏。
- 某个线程长期 BLOCKED = 锁竞争。
3.4 数据库监控
慢 SQL 是最常见的性能瓶颈。
- 慢查询日志:开启后能看到执行慢的 SQL。
EXPLAIN:分析 SQL 执行计划,判断有没有走索引、是否全表扫描。- 关注:连接池是否耗尽、锁等待、扫描行数。
例:
EXPLAIN SELECT * FROM orders WHERE status = 'PAID';如果type=ALL说明全表扫描,status 字段该加索引了。
3.5 监控要"同时看"
压测时不要只盯 JMeter 报告。推荐的观察姿势:
一屏 JMeter 聚合报告(TPS、RT、Error%) 一屏 top(CPU/内存) 一屏 jstat(GC) 一屏 慢 SQL 日志四个一起看,才能把"现象"和"原因"对上。
3.6 本阶段自测
- 会用
top/free看 CPU 和内存。 - 会用
jstat/JVisualVM 看 GC 和内存趋势。 - 会用
EXPLAIN判断 SQL 有没有走索引。 - 压测时能同时盯住四层数据。
动手任务:拿自己的 Spring Boot 项目,一边用 JMeter 压测,一边用jstat观察 GC,记录下 CPU、内存、GC 的变化曲线。
✅ 会看数据后,进入阶段 4:分析与定位瓶颈——这是最值钱的能力。