一、命令简介
vmstat
是一种在类 Unix 系统上常用的性能监控工具,它可以报告虚拟内存统计信息,包括进程、内存、分页、块 IO、陷阱(中断)和 CPU 活动等。
二、命令参数
2.1 命令格式
bash
vmstat [选项] [ 延迟 [次数] ]
2.2 选项
bash
-a, --active 活跃/非活跃内存
-f, --forks 自系统启动以来的进程派生数
-m, --slabs slab信息
-n, --one-header 不重新显示标题
-s, --stats 摘要
-d, --disk 磁盘统计
-D, --disk-sum 汇总磁盘统计
-p, --partition <dev> 特定分区的统计
-S, --unit <char> 定义显示单位
-w, --wide 宽输出
-t, --timestamp 显示时间戳
-h, --help 显示此帮助然后退出
-V, --version 显示程序版本然后退出
2.3 参数
延迟
: 每次报告之间的延迟时间(以秒为单位)。次数
: 要报告的次数。
三、命令示例
3.1 显示摘要
小写 s
选项显示摘要,默认内存信息以 Byte 为显示单位。使用大写 S
选项指定单位为 MB(M)
bash
vmstat -sS MB
输出
bash
#内存信息
1963 M total memory
228 M used memory
785 M active memory
605 M inactive memory
310 M free memory
104 M buffer memory
1320 M swap cache
3910 M total swap
91 M used swap
3819 M free swap
#其他信息
220505 non-nice user cpu ticks
5204 nice user cpu ticks
83658 system cpu ticks
95667133 idle cpu ticks
24127 IO-wait cpu ticks
0 IRQ cpu ticks
1697 softirq cpu ticks
3186 stolen cpu ticks
16046170 pages paged in
33059244 pages paged out
50165 pages swapped in
171026 pages swapped out
71506693 interrupts
183449791 CPU context switches
1727201677 boot time
40101 forks
3.2 输出整体信息
使用 vmstat
命令输出:虚拟内存统计信息,包括进程、内存、分页、块 IO、陷阱(中断)和 CPU 活动等信息。
使用大写 -S
选项调整内存显示单位,更利于阅读。注意,这个选项只能改变内存信息的单位,对磁盘等信息等单位无效。
bash
vmstat -S MB
英文环境:正常输出
注意,中文环境:不对齐
3.3 动态输出
设置输出频率
格式:vimstat 更新频率(秒钟)
bash
vmstat 1
输出:每秒输出一次。ctrl + c
停止。
设置输出次数
格式:vmstat 更新频率 更新次数
bash
#每秒更新一次,共更新10次
vmstat 1 10
完成 10 次输出后会自动退出 vmstat 命令。
3.4 宽输出格式
使用小写 -w
参数设置 宽模式
bash
vmstat -w 1
通过比较,使用-w 选项的输出更宽。
3.5 磁盘信息
1.显示磁盘 I/O 统计信息,每秒更新一次:
bash
vmstat -d
-S 选项无法改变磁盘信息的显示单位
bash
[root@sc ~]# vmstat -d -S M
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 8645 4 558209 3373 136030 24041 4519632 321532 0 205
sr0 54 0 4192 13 0 0 0 0 0 0
dm-0 7775 0 441727 2865 159239 0 4515404 398469 0 205
dm-1 98 0 4440 3 0 0 0 0 0 0
[root@sc ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 8645 4 558209 3373 136030 24041 4519632 321532 0 205
sr0 54 0 4192 13 0 0 0 0 0 0
dm-0 7775 0 441727 2865 159239 0 4515404 398469 0 205
dm-1 98 0 4440 3 0 0 0 0 0 0
2.磁盘信息汇总
bash
vmstat -D
输出,同样 -S 选项对它无用。
bash
4 disks
2 partitions
16576 total reads
4 merged reads
1008664 read sectors
6321 milli reading
295321 writes
24043 merged writes
9035604 written sectors
720119 milli writing
0 inprogress IO
410 milli spent IO
3.6 显示时间戳
使用-t 选项,额外显示时间戳。
bash
vmstat -t -S M
bash
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----
r b swpd free buff cache si so bi bo in cs us sy id wa st CST
0 0 0 819 2 756 0 0 0 1 1 10 0 0 100 0 0 2024-09-30 16:20:44
四、更多
4..1 vmstat 命令输出字段的含义
vmstat
命令输出字段:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swap free buff cache si so bi bo in cs us sy id wa st
字段含义:
-
procs
r
: 等待运行的进程数(正在等待 CPU 资源的进程数)b
: 等待 I/O 的进程数(正在等待 I/O 操作的进程数)
-
memory
swap
: 使用的交换空间大小(以 KB 为单位,或者根据-S
选项指定的单位)free
: 空闲的内存大小(未被使用的内存大小)buff
: 用作缓冲区的内存大小(主要用于块设备 I/O)cache
: 用作高速缓存的内存大小(主要用于文件系统)
-
swap
si
: 从交换区到内存的交换速率(每秒 KB)so
: 从内存到交换区的交换速率(每秒 KB)
-
io
bi
: 从块设备接收的块数(每秒)bo
: 发送到块设备的块数(每秒)
-
system
in
: 每秒中断数,包括时钟中断cs
: 每秒上下文切换数
-
cpu(这些是 CPU 时间的百分比)
us
: 用户时间(非内核进程消耗的 CPU 时间)sy
: 系统时间(内核进程消耗的 CPU 时间)id
: 空闲时间(CPU 没有执行任何进程的时间)wa
: 等待 I/O 的时间(CPU 等待 I/O 操作完成的时间)st
: 被虚拟化偷走的时间(在虚拟机中运行时,宿主机消耗的时间)
请注意,vmstat
的输出会根据你的系统和配置有所不同,特别是在不同版本的 Linux 发行版中。-S
选项允许你指定输出单位,可以是 k
(千字节)、K
(千字节)、m
(兆字节)或 M
(兆字节)。例如,-S M
将以兆字节为单位显示内存和交换空间的大小。
4.2 slab 信息
vmstat -m
命令在 Linux 系统中显示的是 slab 分配器的信息,slab 分配器是内核用来管理内存的一种机制,它主要用于分配和释放内核对象,如文件描述符、进程结构等。
vmstat -m
的输出通常包含以下几列内容:
- Slab 缓存名称:内核 slab 缓存区的名称,表明了该 slab 缓存是用来存储哪种类型的对象。
- 活动对象数目:当前正在使用的对象数量。
- 活动对象大小:当前正在使用的对象总大小。
- 对象数目:slab 缓存中对象的总数。
- 对象大小:slab 缓存中所有对象的总大小。
- 页面数目:slab 缓存占用的物理页面数。
以下是 vmstat -m
命令输出的一个示例:
Cache Num Total Size Pages
ext4_inode_cache 321 321 960 34
ext4_xattr 8 8 192 21
buffer_head 345 345 112 29
vm_area_struct 7954 7954 104 25
mm_struct 164 164 768 21
...
这些信息可以帮助系统管理员或开发者了解内核中 slab 分配器的使用情况,比如哪些缓存正在使用,它们占用了多少内存,以及它们管理的对象数量等。这对于调试内存使用问题或优化系统性能非常有用。
总结:vmstat输出格式太差了,还是使用其他同类命令吧。