一、命令简介
vmstat
是一种在类 Unix 系统上常用的性能监控工具,它可以报告虚拟内存统计信息,包括进程、内存、分页、块 IO、陷阱(中断)和 CPU 活动等。
二、命令参数
2.1 命令格式
vmstat [选项] [ 延迟 [次数] ]
2.2 选项
-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)
vmstat -sS MB
输出
#内存信息 1963 M total memory228 M used memory785 M active memory605 M inactive memory310 M free memory104 M buffer memory1320 M swap cache3910 M total swap91 M used swap3819 M free swap
#其他信息220505 non-nice user cpu ticks5204 nice user cpu ticks83658 system cpu ticks95667133 idle cpu ticks24127 IO-wait cpu ticks0 IRQ cpu ticks1697 softirq cpu ticks3186 stolen cpu ticks16046170 pages paged in33059244 pages paged out50165 pages swapped in171026 pages swapped out71506693 interrupts183449791 CPU context switches1727201677 boot time40101 forks
3.2 输出整体信息
使用 vmstat
命令输出:虚拟内存统计信息,包括进程、内存、分页、块 IO、陷阱(中断)和 CPU 活动等信息。
使用大写 -S
选项调整内存显示单位,更利于阅读。注意,这个选项只能改变内存信息的单位,对磁盘等信息等单位无效。
vmstat -S MB
英文环境:正常输出
注意,中文环境:不对齐
3.3 动态输出
设置输出频率
格式:vimstat 更新频率(秒钟)
vmstat 1
输出:每秒输出一次。ctrl + c
停止。
设置输出次数
格式:vmstat 更新频率 更新次数
#每秒更新一次,共更新10次
vmstat 1 10
完成 10 次输出后会自动退出 vmstat 命令。
3.4 宽输出格式
使用小写 -w
参数设置 宽模式
vmstat -w 1
通过比较,使用-w 选项的输出更宽。
3.5 磁盘信息
1.显示磁盘 I/O 统计信息,每秒更新一次:
vmstat -d
-S 选项无法改变磁盘信息的显示单位
[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.磁盘信息汇总
vmstat -D
输出,同样 -S 选项对它无用。
4 disks 2 partitions 16576 total reads4 merged reads1008664 read sectors6321 milli reading295321 writes24043 merged writes9035604 written sectors720119 milli writing0 inprogress IO410 milli spent IO
3.6 显示时间戳
使用-t 选项,额外显示时间戳。
vmstat -t -S M
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----r b swpd free buff cache si so bi bo in cs us sy id wa st CST0 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输出格式太差了,还是使用其他同类命令吧。