vmstat输出字段解读

1.proc下r/b字段含义解读

3fe06d8e2da8060c65f3373d887da622.png

vmstat 命令中,rb 是两个重要的参数,它们反映了系统的运行状态和资源使用情况。以下是它们的含义:

  • r(run queue):表示运行队列中等待执行的进程数。这个值显示了当前有多少进程正在等待 CPU 资源来运行。如果 r 的值持续高于 CPU 的核心数,说明系统可能存在 CPU 资源瓶颈,任务调度压力较大。

  • b(blocked processes):表示处于不可中断睡眠状态(blocked)的进程数。这些进程通常在等待 I/O 操作(如磁盘读写)完成。如果 b 的值较高,说明系统可能存在 I/O 瓶颈,进程被阻塞在等待外部资源上

1.字段解释

运行 vmstat 时,输出可能如下:

vmstat -w   # 宽显示
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  1    0   1024   2048  4096    0    0    10    20  100  200 10  5 80  5  0
  • r = 2:有 2 个进程在运行队列中等待 CPU。
  • b = 1:有 1 个进程因等待 I/O 而被阻塞。

2.总结

  • r 高:关注 CPU 是否够用,可能需要优化任务调度或增加计算资源。
  • b 高:检查 I/O 性能(如磁盘、网络),可能需要优化存储或减少 I/O 密集型任务。

2.swap/io下字段si/so bi/bo

vmstat 命令的输出中,sisobibo 是与系统内存和 I/O 相关的字段。

24c7faf15669c5431216eec7fc71a113.png

字段解释

  1. si (Swap In)

    • 含义: 从交换分区(swap)换入内存的数据量,单位通常是每秒千字节(KB/s)。
    • 意义: 表示系统因内存不足而从磁盘读取之前换出的页面。
    • 正常情况: 如果 si 接近 0,说明几乎没有使用交换分区,内存充足;如果持续较高,可能是内存不足的信号
  2. so (Swap Out)

    • 含义: 从内存换出到交换分区的数据量,单位是每秒千字节(KB/s)。
    • 意义: 表示系统将内存中的页面写入交换分区以释放空间。
    • 正常情况: so 为 0 或很低时,说明内存使用正常;高值可能表明内存压力大。
  3. bi (Blocks In)

    • 含义: 从块设备(如硬盘)读取到内存的块数,单位是每秒块数。
    • 意义: 反映从磁盘读取数据的活动,例如加载文件、程序或缓存数据。
    • 正常情况: 值取决于系统负载,频繁读取(如数据库查询)会导致 bi 升高。
  4. bo (Blocks Out)

    • 含义: 从内存写入块设备的块数,单位是每秒块数。
    • 意义: 表示写操作,如保存文件或将内存缓存同步到磁盘。
    • 正常情况: 高 bo 值可能出现在写密集型任务(如日志记录)中。

1.运行 vmstat

基本命令:

1
vmstat [延迟秒数] [采样次数]

示例:

1
vmstat 1 10
  • 每 1 秒采样一次,共采样 10 次,输出包括 sisobibo 等字段。

输出示例:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0  1024  524288 131072 1048576   0    0    12    25  100  200  5  2 90  3  0
  • sisoswap 列下。
  • biboio 列下。

2.使用场景

  • 内存压力分析

    • 检查 siso 是否持续大于 0。如果是,说明系统频繁使用交换分区,可能需要增加物理内存或优化应用程序内存使用
    • 示例:si=50, so=30 表示每秒有 50KB 换入、30KB 换出,内存可能不足。
  • I/O 性能监控

    • 通过 bibo 判断磁盘读写负载。如果 bi 很高,可能是读取密集型任务(如大数据处理);如果 bo 很高,可能是写密集型任务(如日志写入)。
    • 示例:bi=1000, bo=500 表示每秒从磁盘读 1000 块、写 500 块,I/O 活动频繁。
  • 结合其他字段

    • wa(CPU 等待 I/O 的时间百分比)结合:如果 wa 高且 bi/bo 高,说明磁盘 I/O 是瓶颈。
    • swpd(已使用的交换分区大小)结合:如果 swpd 增加且 si/so 非零,内存使用已超出物理限制。

3. 实际应用

  • 诊断系统缓慢
    • 运行 vmstat 1 观察实时数据。如果 si/so 高,检查内存使用(free -m);如果 bi/bo 高,检查磁盘活动(iostat)。
  • 性能调优
    • 根据 bi/bo 调整缓存策略(如增大 buffcache)。
    • 根据 si/so 决定是否禁用交换分区(swapoff -a)或增加 RAM。

4.小贴士

  • 单位转换: bi/bo 的块大小通常是 512 字节或 1KB(取决于系统),可通过 vmstat -w 查看宽格式确认。
  • 长期监控: 使用 vmstat 5 > output.txt 记录数据,后续分析趋势。

3.system/cpu字段解释

vmstat 命令的输出中,systemcpu 部分提供了与系统中断、上下文切换以及 CPU 使用情况相关的信息。

ce08b061d3492bcd6f59a835ec618968.png

System 字段解释

system 部分包括以下两个字段:

  1. in (Interrupts)

    • 含义: 每秒发生的中断次数。
    • 意义: 中断是由硬件(如网卡、磁盘)或定时器触发的,用于通知 CPU 处理某些事件。
    • 正常情况: 值的高低取决于系统负载和硬件活动。频繁的 I/O 操作(如网络或磁盘活动)会导致 in 增加。
  2. cs (Context Switches)

    • 含义: 每秒发生的上下文切换次数。
    • 意义: 上下文切换是 CPU 从一个进程或线程切换到另一个的过程,通常与多任务处理相关。
    • 正常情况: 值高说明系统正在处理大量任务切换,可能是多线程应用或进程竞争 CPU 的结果。

CPU 字段解释

cpu 部分包括以下五个字段,表示 CPU 时间的使用百分比(总和为 100%):

  1. us (User Time)

    • 含义: CPU 在用户态运行非内核代码的时间百分比。
    • 意义: 反映用户应用程序(如 Web 服务器、数据库)的 CPU 使用情况。
    • 正常情况: 高 us 表示用户程序占用较多 CPU,常见于计算密集型任务。
  2. sy (System Time)

    • 含义: CPU 在内核态运行的时间百分比。
    • 意义: 表示系统内核处理(如 I/O、网络、调度)的开销。
    • 正常情况: 高 sy 可能说明系统调用频繁或 I/O 操作较多。
  3. id (Idle Time)

    • 含义: CPU 空闲的时间百分比。
    • 意义: 表示 CPU 未被使用的比例。
    • 正常情况: 高 id 表示系统负载低;低 id(接近 0)说明 CPU 繁忙。
  4. wa (I/O Wait Time)

    • 含义: CPU 等待 I/O 操作完成的时间百分比。
    • 意义: 反映 CPU 因为等待磁盘或网络 I/O 而空闲的时间。
    • 正常情况: 高 wa 表示 I/O 瓶颈,需检查磁盘或网络性能。
  5. st (Steal Time)

    • 含义: 在虚拟化环境中,虚拟 CPU 被其他虚拟机“抢占”的时间百分比。
    • 意义: 表示虚拟机未获得预期 CPU 资源的情况。
    • 正常情况: 在物理机上通常为 0;在虚拟机上若 st 高,说明宿主机超载。

用法

vmstatsystemcpu 字段可用于监控系统性能和诊断问题。以下是具体用法和场景:

1. 运行 vmstat

基本命令:

1
vmstat [延迟秒数] [采样次数]

示例:

1
vmstat 1 5

输出示例:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0  1024  524288 131072 1048576   0    0    12    25  150  300 10  5 80  5  0
  • incssystem 列下。
  • ussyidwastcpu 列下。

2. 使用场景

  • CPU 使用分析

    • 检查 ussy:如果 us 高,可能是应用程序负载重(如编译代码);如果 sy 高,可能是系统调用或 I/O 开销大。
    • 示例:us=50, sy=20, id=30 表示用户程序占 50%,内核占 20%,空闲 30%。
  • I/O 瓶颈检测

    • 查看 wa:若 wa 高(如 20%以上),结合 bi/bo(I/O 字段)检查磁盘活动。
    • 示例:wa=25, bi=1000 表示 CPU 25% 时间在等待 I/O,可能是磁盘读取慢。
  • 虚拟化性能监控

    • 检查 st:若 st 非零且较高(如 10%),说明虚拟机未获得足够 CPU 资源,需联系宿主机管理员或调整资源分配
  • 系统调度效率

    • 观察 cs:高上下文切换(如 cs=1000)可能表明任务过多或线程竞争激烈,可用 toppidstat 进一步定位。
    • 检查 in:高中断(如 in=500)可能与网络或磁盘活动相关,可用 sariostat 分析。

3. 实际应用

  • 诊断高负载
    • 运行 vmstat 1 观察实时数据。如果 id 低、ussy 高,说明 CPU 被占满;若 wa 高,检查 I/O。
  • 优化系统
    • cs:减少进程数或优化多线程程序。
    • sy:减少系统调用(如调整文件缓存策略)。
    • st:迁移到负载较低的宿主机。

4. 结合其他工具

  • top: 查看具体进程的 CPU 使用,与 ussy 对应。
  • iostat: 分析磁盘 I/O,与 wabi/bo 结合。
  • sar: 提供历史数据,验证 incs 的趋势。

5.小贴士

  • 多核 CPU: vmstat 显示的是所有 CPU 的平均值,若需单核数据,可用 mpstat
  • 长期监控: 用 vmstat 5 > log.txt 记录数据,分析负载变化。