iostat vmstat sar jstat jstack在性能测试中的常用命令汇总
在性能测试中,常用工具提供的指标能帮助分析系统瓶颈,以下是各命令的详细说明及关键关注点:
1. iostat(I/O 和 CPU 统计)
用途:监控磁盘 I/O 和 CPU 使用情况。
常用命令:
iostat -x 1 # 每秒显示详细统计(含扩展字段)
输出字段解析
-
CPU 部分:
%user:用户态 CPU 占用率。%system:内核态 CPU 占用率。%iowait:CPU 等待 I/O 的时间占比(关键指标,>5% 可能磁盘瓶颈)。%idle:空闲 CPU 时间。
-
磁盘(Device)部分:
r/s/w/s:每秒读/写请求数(合并后的请求)。rMB/s/wMB/s:每秒读/写吞吐量。await:平均 I/O 等待时间(ms)(关键指标,>10ms 可能异常)。svctm:磁盘处理 I/O 的平均时间(通常接近实际硬件指标)。%util:磁盘利用率(>70% 表示接近瓶颈)。
关注点
- 高
%iowait+ 高await:磁盘过载或存在慢存储设备。 %util长期接近 100%:磁盘成瓶颈,需优化 I/O 或升级硬件。
2. vmstat(虚拟内存统计)
用途:查看内存、进程、CPU、磁盘、上下文切换等全局信息。
常用命令:
vmstat 1 # 每秒输出一次
vmstat -SM 1 # 内存以 MB 为单位显示
输出字段解析
-
系统(Procs):
r:运行队列中的进程数(关键指标,持续 > CPU 核数表示 CPU 不足)。b:等待 I/O 的阻塞进程数。
-
内存(Memory):
free:空闲内存(KB/MB)。buff/cache:缓冲区/缓存占用的内存。
-
交换(Swap):
si/so:每秒从磁盘读入内存(swap-in)/写出到磁盘(swap-out)的数据量(若 >0 表示内存不足)。
-
I/O:
bi/bo:块设备每秒接收/发送的数据量(块数,需换算为 MB)。
-
CPU:
us+sy:用户态和内核态 CPU 总和(若总和 >80% 可能 CPU 瓶颈)。wa:等待 I/O 的 CPU 时间。st(虚拟化环境):CPU 被其他虚拟机占用的时间。
关注点
r> CPU 核数:CPU 资源紧张。si/so>0:内存不足导致频繁交换,需优化内存或扩容。wa与iostat的%iowait结合确认 I/O 瓶颈。
3. sar(性能数据采集与分析)
用途:全面的系统历史数据统计(需安装 sysstat)。
常用命令:
sar -u 1 # CPU 使用率
sar -r 1 # 内存使用
sar -b 1 # I/O 统计
sar -n DEV 1 # 网络流量
关键指标
-
CPU(
-u):%idle持续低:系统繁忙。%iowait与vmstat/iostat指标联动。
-
内存(
-r):kbmemfree:空闲内存。kbbuffers/kbcached:缓冲/缓存内存。%memused:已用内存占比。
-
磁盘(
-b):tps:每秒 I/O 请求数。rtps/wtps:读/写请求数。bread/s/bwrtn/s:块读取/写入速度(需换算为 MB)。
-
网络(
-n DEV):rxkB/s/txkB/s:每秒接收/发送的千字节数。%ifutil:网络接口利用率(需安装插件)。
关注点
- 对比历史基线数据,观察高峰时段指标变化。
- 网络流量过高可能导致延迟或丢包。
4. jstat(JVM 统计)
用途:监控 JVM 堆内存和垃圾回收(GC)。
常用命令:
jstat -gcutil <pid> 1000 # 每秒输出 GC 统计
输出字段解析
S0/S1:Survivor 区占用百分比。E:Eden 区占用百分比。O:老年代占用百分比(关键指标,>80% 可能触发 Full GC)。M:元空间(Metaspace)占用百分比。YGC/YGCT:Young GC 次数及耗时。FGC/FGCT:Full GC 次数及耗时(关键指标,频繁 Full GC 可能内存泄漏)。GCT:总 GC 时间。
关注点
O持续高:优化对象生命周期或调整堆大小。FGC频繁:检查内存泄漏或调整 GC 策略。
5. jstack(线程分析)
用途:生成 JVM 线程快照,分析线程状态。
常用命令:
jstack <pid> > thread_dump.txt
分析重点
- 线程状态:
RUNNABLE:运行中(可能占用 CPU)。BLOCKED/WAITING:等待资源或锁(可能死锁)。
- 锁信息:查找死锁(如
deadlock关键字)。 - 高 CPU 线程:结合
top -H找到线程 ID,转为十六进制在 jstack 结果中定位。
关注点
- 多次转储对比,确认持续阻塞的线程。
- 关注
java.util.concurrent锁或数据库连接池等待。
总结:性能测试关键链路
- CPU:
us/sy是否过高,r队列是否堆积。 - 内存:是否频繁交换(
si/so),JVM 是否频繁 GC。 - 磁盘 I/O:
%util/await是否异常。 - 网络:流量是否饱和(如
rxkB/s)。 - 应用层:线程阻塞、死锁或 Full GC 问题。
通过组合工具结果,结合业务场景(如高并发、大数据量下表现),可定位到性能瓶颈并针对性优化。
浙公网安备 33010602011771号