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:内存不足导致频繁交换,需优化内存或扩容。
  • waiostat%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 持续低:系统繁忙。
    • %iowaitvmstat/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 锁或数据库连接池等待。

总结:性能测试关键链路

  1. CPUus/sy 是否过高,r 队列是否堆积。
  2. 内存:是否频繁交换(si/so),JVM 是否频繁 GC。
  3. 磁盘 I/O%util/await 是否异常。
  4. 网络:流量是否饱和(如 rxkB/s)。
  5. 应用层:线程阻塞、死锁或 Full GC 问题。

通过组合工具结果,结合业务场景(如高并发、大数据量下表现),可定位到性能瓶颈并针对性优化。

posted @ 2025-05-23 14:41  玛卡巴卡糖  阅读(276)  评论(0)    收藏  举报