vmstat
是一个用于监控 Linux 系统性能的工具,能够提供关于 CPU、内存、I/O 和系统整体性能的详细信息。它以简洁的输出格式显示系统的运行状态,非常适合快速诊断性能问题。
1. 启动 vmstat
在终端中输入以下命令即可启动:
vmstat
默认情况下,vmstat
会显示一次系统性能的快照。如果需要实时监控,可以指定刷新间隔和次数。
2. 基本语法
vmstat [刷新间隔] [刷新次数]
- 刷新间隔:每次输出之间的时间间隔(单位为秒)。
- 刷新次数:总共输出的次数。如果不指定刷新次数,则会一直运行直到手动停止。
示例:
vmstat 2 5 # 每隔 2 秒刷新一次,共输出 5 次
3. vmstat
的输出格式
vmstat
的输出分为以下几个部分:
(1) procs(进程相关)
显示与进程相关的统计信息。
字段名 | 含义 |
---|---|
r | 运行队列中的进程数(等待 CPU 调度的进程数)。 |
b | 处于不可中断睡眠状态的进程数(通常是等待 I/O 完成的进程数)。 |
(2) memory(内存相关)
显示内存使用情况。
字段名 | 含义 |
---|---|
swpd | 使用的交换分区大小(单位为 KB)。 |
free | 空闲的物理内存大小(单位为 KB)。 |
buff | 用作缓冲区的内存大小(单位为 KB)。 |
cache | 用作缓存的内存大小(单位为 KB)。 |
(3) swap(交换分区相关)
显示交换分区的活动情况。
字段名 | 含义 |
---|---|
si | 每秒从磁盘交换到内存的数据量(单位为 KB)。 |
so | 每秒从内存交换到磁盘的数据量(单位为 KB)。 |
(4) io(I/O 相关)
显示块设备的 I/O 活动。
字段名 | 含义 |
---|---|
bi | 每秒从块设备读取的数据量(单位为 KB)。 |
bo | 每秒写入块设备的数据量(单位为 KB)。 |
(5) system(系统相关)
显示系统调用和中断的统计信息。
字段名 | 含义 |
---|---|
in | 每秒的中断次数(包括时钟中断)。 |
cs | 每秒的上下文切换次数。 |
(6) cpu(CPU 相关)
显示 CPU 时间分配情况(百分比)。
字段名 | 含义 |
---|---|
us | 用户空间占用 CPU 的时间百分比。 |
sy | 内核空间占用 CPU 的时间百分比。 |
id | CPU 空闲时间百分比。 |
wa | CPU 等待 I/O 操作完成的时间百分比。 |
st | 虚拟机偷取的时间百分比(仅在虚拟化环境中显示)。 |
4. 示例输出
运行以下命令:
vmstat 2
输出可能如下:
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 10240 51200 20480 102400 0 0 10 20 100 200 5 2 90 3 0
解释:
- procs:有 1 个进程在运行队列中,没有处于不可中断睡眠状态的进程。
- memory:使用了 10 MB 的交换分区,空闲内存为 51 MB,缓冲区占用了 20 MB,缓存占用了 102 MB。
- swap:没有数据从磁盘交换到内存或从内存交换到磁盘。
- io:每秒从块设备读取 10 KB 数据,写入 20 KB 数据。
- system:每秒发生 100 次中断,200 次上下文切换。
- cpu:5% 的时间用于用户空间,2% 的时间用于内核空间,90% 的时间空闲,3% 的时间等待 I/O。
5. 常用参数
vmstat
支持一些常用参数来调整其行为:
参数 | 功能 |
---|---|
-a | 显示活跃和非活跃内存(替代默认的 buff 和 cache 列)。 |
-f | 显示自系统启动以来的 fork 数量(创建的进程总数)。 |
-s | 显示详细的内存统计信息(以表格形式)。 |
-d | 显示每个块设备的 I/O 统计信息。 |
-p <设备> | 显示指定块设备的详细统计信息。 |
-t | 在输出中包含时间戳。 |
-m | 显示 slab 缓存的使用情况。 |
6. 示例用法
(1) 实时监控系统性能
每隔 2 秒刷新一次,共输出 10 次:
vmstat 2 10
(2) 查看活跃和非活跃内存
显示活跃和非活跃内存的使用情况:
vmstat -a
(3) 查看详细的内存统计信息
显示详细的内存统计信息:
vmstat -s
(4) 查看块设备的 I/O 统计信息
显示所有块设备的 I/O 统计信息:
vmstat -d
(5) 查看指定块设备的统计信息
显示 /dev/sda
的统计信息:
vmstat -p /dev/sda
(6) 查看系统启动以来的 fork 数量
显示自系统启动以来创建的进程总数:
vmstat -f
7. 分析与优化建议
- 高
r
值:表示运行队列中有大量进程等待 CPU 调度,可能是 CPU 性能瓶颈。 - 高
wa
值:表示 CPU 花费大量时间等待 I/O 操作完成,可能是磁盘性能瓶颈。 - 高
si
或so
值:表示频繁使用交换分区,可能是内存不足。 - 高
bi
或bo
值:表示大量的磁盘读写操作,可能是 I/O 密集型任务导致的瓶颈。 - 高
cs
值:表示频繁的上下文切换,可能导致 CPU 开销增加。