linux运维一天一个shell命令之vmstat详解

概念

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. 每秒更新一次,持续 5vmstat 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 性能和进程活动等

  1. 高 CPU 使用率
    如果系统的 CPU 使用率持续高于 80%,可能会导致性能问题。诊断步骤:
    运行 vmstat,查看 us(用户态 CPU 使用率)和 sy(系统态 CPU 使用率)。
vmstat 1 5
  • 如果 us 高,表示大部分 CPU 时间花在用户态应用程序上,可能需要优化应用程序的性能。
  • 如果 sy 高,表示系统调用或内核活动占用了较多 CPU 资源,可能需要查看内核活动或驱动程序的性能。
  • 如果 wa(IO 等待时间)高,表示 CPU 等待 IO 操作完成,可能是磁盘或网络 IO 成为瓶颈。
  1. 内存不足
    内存不足会导致系统性能下降,甚至出现交换(swap)操作。诊断步骤:
    运行 vmstat,查看 free(空闲内存)、buff(缓冲区内存)和 cache(缓存内存)。
vmstat 1 5
  • 如果 free 内存比较低,但 buff 和 cache 较高,表示内存大部分用于缓冲和缓存,这是正常的。
  • 查看 si(swap in)和 so(swap out)。如果这两个值较高,表示系统正在频繁使用交换空间,可能需要增加物理内存或优化应用程序的内存使用。
  1. IO 性能问题
    高磁盘 IO 使用率会导致系统性能下降。诊断步骤:
    运行 vmstat,查看 bi(块设备读取)和 bo(块设备写入)。
vmstat 1 5
  • 如果 bi 和 bo 值较高,表示磁盘 IO 活动频繁,可能需要优化磁盘使用或考虑使用更快的存储设备。
  • 高 wa(等待 IO CPU 时间)也表示系统可能存在 IO 瓶颈。
  1. 进程问题
    系统中可能有过多的进程在运行,导致性能问题。诊断步骤:
    运行 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

分析

  1. CPU 使用率:
  • us = 60:用户态 CPU 使用率较高,表示应用程序占用了大部分 CPU 资源。
  • sy = 30:系统态 CPU 使用率也较高,可能是系统调用或内核活动频繁。
  • id = 5:空闲 CPU 时间较少,CPU 处于高负载状态。
  • wa = 5:有一些 IO 等待时间,但不是主要瓶颈。
  1. 内存:
  • free = 10000:空闲内存较少。
  • buff = 2000,cache = 30000:大部分内存用于缓冲和缓存,这是正常现象。
  • swpd = 0:没有使用交换空间。
  1. IO:
  • bi = 50,bo = 50:磁盘 IO 频繁,但 wa 值较低,表示 IO 不是主要瓶颈。
  1. 进程:
  • r = 2:有两个进程在运行队列中,等待 CPU。
  • b = 1:一个进程在等待 IO 操作。

结论

  • CPU 负载较高,主要是因为用户态和系统态 CPU 使用率都很高。
  • 内存基本充足,没有使用交换空间。
  • IO 活动频繁,但不是主要瓶颈。
  • 进程队列中有进程在等待 CPU。

解决措施

  • 优化应用程序以减少 CPU 使用。
  • 检查和优化系统调用或内核活动。
  • 考虑增加 CPU 核心数,以处理更多的并发进程。
  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值