概念
vmstat 是 Linux 系统中一个非常有用的工具,主要用于报告系统的虚拟内存、进程、CPU 活动和 IO 性能等信息。以下是对 vmstat 工具的详细解释:
基本语法
vmstat [options] [delay [count]]
delay:更新的时间间隔(以秒为单位)。
count:更新的次数。
- 例如,要每秒报告一次系统状态并报告 5 次,可以使用以下命令:
vmstat 1 5
输出字段
vmstat 的输出包含多个字段,每个字段代表不同的系统指标。以下是这些字段的详细解释:
Procs
r:运行队列中的进程数(运行或等待 CPU)
b:在不可中断睡眠中的进程数(一般等待 IO)
Memory
swpd:已交换到磁盘的内存总量(单位是 KB)
free:空闲内存总量(单位是 KB)
buff:用于缓冲的内存总量(单位是 KB)
cache:用于缓存的内存总量(单位是 KB)
Swap
si:从磁盘交换进内存的交换页数(单位是 KB/s)。
so:从内存交换到磁盘的交换页数(单位是 KB/s)。
IO
bi:从块设备(如磁盘)读取的数据块数(单位是块/s)。
bo:写到块设备(如磁盘)上的数据块数(单位是块/s)。
System
in:每秒中断数,包括时钟中断。
cs:每秒上下文切换数。
CPU
us:用户态 CPU 时间百分比。
sy:系统态 CPU 时间百分比。
id:空闲 CPU 时间百分比。
wa:等待 IO CPU 时间百分比。
st:被虚拟机窃取的 CPU 时间百分比。
选项
参数
vmstat 提供了一些可选参数,用于调整输出格式或显示特定的信息。常用的选项包括:
-a:显示活跃和非活跃内存。
-d:显示磁盘状态。
-s:显示内存相关的统计信息。
-t:显示时间戳。
-S:设置输出统计信息的单位(K = 1000,M = 1000000)。
示例
1. 每秒更新一次,持续 5 次
vmstat 1 5
2. 显示磁盘统计信息
vmstat -d
3. 显示内存统计信息
vmstat -s
4. 显示带时间戳的统计信息
vmstat -t
解析示例输出
以下是 vmstat 的示例输出:
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 0 79324 1136 104664 0 0 1 1 1 2 0 0 99 0 0
- procs:
r = 1:有一个进程正在运行或等待 CPU。
b = 0:没有进程在等待 IO。
- memory:
swpd = 0:没有交换内存。
free = 79324:有 79324 KB 的空闲内存。
buff = 1136:有 1136 KB 的内存用于缓冲。
cache = 104664:有 104664 KB 的内存用于缓存。
- swap:
si = 0:没有从磁盘交换进内存的数据。
so = 0:没有从内存交换到磁盘的数据。
- io:
bi = 1:每秒从块设备读取 1 个数据块。
bo = 1:每秒写到块设备 1 个数据块。
- system:
in = 1:每秒 1 个中断。
cs = 2:每秒 2 个上下文切换。
cpu:
us = 0:用户态 CPU 时间占 0%。
sy = 0:系统态 CPU 时间占 0%。
id = 99:空闲 CPU 时间占 99%。
wa = 0:等待 IO 的 CPU 时间占 0%。
st = 0:被虚拟机窃取的 CPU 时间占 0%。
如何使用vmstat排查系统问题
分析步骤
使用 vmstat 工具可以帮助你深入了解系统的性能问题,包括 CPU 使用率、内存利用率、IO 性能和进程活动等
- 高 CPU 使用率
如果系统的 CPU 使用率持续高于 80%,可能会导致性能问题。诊断步骤:
运行 vmstat,查看 us(用户态 CPU 使用率)和 sy(系统态 CPU 使用率)。
vmstat 1 5
- 如果 us 高,表示大部分 CPU 时间花在用户态应用程序上,可能需要优化应用程序的性能。
- 如果 sy 高,表示系统调用或内核活动占用了较多 CPU 资源,可能需要查看内核活动或驱动程序的性能。
- 如果 wa(IO 等待时间)高,表示 CPU 等待 IO 操作完成,可能是磁盘或网络 IO 成为瓶颈。
- 内存不足
内存不足会导致系统性能下降,甚至出现交换(swap)操作。诊断步骤:
运行 vmstat,查看 free(空闲内存)、buff(缓冲区内存)和 cache(缓存内存)。
vmstat 1 5
- 如果 free 内存比较低,但 buff 和 cache 较高,表示内存大部分用于缓冲和缓存,这是正常的。
- 查看 si(swap in)和 so(swap out)。如果这两个值较高,表示系统正在频繁使用交换空间,可能需要增加物理内存或优化应用程序的内存使用。
- IO 性能问题
高磁盘 IO 使用率会导致系统性能下降。诊断步骤:
运行 vmstat,查看 bi(块设备读取)和 bo(块设备写入)。
vmstat 1 5
- 如果 bi 和 bo 值较高,表示磁盘 IO 活动频繁,可能需要优化磁盘使用或考虑使用更快的存储设备。
- 高 wa(等待 IO CPU 时间)也表示系统可能存在 IO 瓶颈。
- 进程问题
系统中可能有过多的进程在运行,导致性能问题。诊断步骤:
运行 vmstat,查看 r(运行队列中的进程数)和 b(在不可中断睡眠中的进程数)。
vmstat 1 5
- 如果 r 值持续高于 CPU 核心数,表示系统中有许多进程在等待 CPU,可能需要优化应用程序或增加 CPU 核心数。
- 如果 b 值较高,表示有很多进程在等待 IO 操作完成,可能需要优化 IO 性能。
示例分析
假设 vmstat 输出如下:
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 10000 2000 30000 0 0 50 50 100 200 60 30 5 5 0
分析
- CPU 使用率:
- us = 60:用户态 CPU 使用率较高,表示应用程序占用了大部分 CPU 资源。
- sy = 30:系统态 CPU 使用率也较高,可能是系统调用或内核活动频繁。
- id = 5:空闲 CPU 时间较少,CPU 处于高负载状态。
- wa = 5:有一些 IO 等待时间,但不是主要瓶颈。
- 内存:
- free = 10000:空闲内存较少。
- buff = 2000,cache = 30000:大部分内存用于缓冲和缓存,这是正常现象。
- swpd = 0:没有使用交换空间。
- IO:
- bi = 50,bo = 50:磁盘 IO 频繁,但 wa 值较低,表示 IO 不是主要瓶颈。
- 进程:
- r = 2:有两个进程在运行队列中,等待 CPU。
- b = 1:一个进程在等待 IO 操作。
结论
- CPU 负载较高,主要是因为用户态和系统态 CPU 使用率都很高。
- 内存基本充足,没有使用交换空间。
- IO 活动频繁,但不是主要瓶颈。
- 进程队列中有进程在等待 CPU。
解决措施
- 优化应用程序以减少 CPU 使用。
- 检查和优化系统调用或内核活动。
- 考虑增加 CPU 核心数,以处理更多的并发进程。