命令简介

vmstat 是 Linux 系统中一个用于监控虚拟内存、内核线程、磁盘、CPU 活动等系统资源使用情况的命令。它可以实时显示系统摘要统计信息,帮助用户了解系统当前的运行状态,非常适合用于系统性能监控和故障排查。

命令格式

1
vmstat [选项] [延迟时间] [次数]

其中:

  • 延迟时间:指定每次显示系统信息的时间间隔,单位为秒。
  • 次数:指定显示系统信息的次数,如果省略,则一直显示直到按 Ctrl+C 退出。

参数说明

参数 说明 备注
-a 显示活跃和非活跃内存 -
-f 显示事件计数和内存分页统计 默认不显示
-m 显示磁盘统计信息 -
-n 只在第一次迭代时显示磁盘分区信息 -m 联合使用
-s 显示内存统计信息 基于命令行使用情况
-d 显示磁盘统计信息 基于命令行使用情况
-D 显示磁盘摘要统计信息 -
-p 显示活跃内存分区统计信息 -
-S 显示单位时间的内存统计信息 -

命令实例

基本用法

1.显示基本系统信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 显示系统信息概览
leazhi@leazhi-ubuntu2310:~/Templates$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b 交换 空闲 缓冲 缓存 si so bi bo in cs us sy id wa st
3 0 0 111013836 700768 8354412 0 0 35 108 7885 58 26 13 61 0 0

# 每 2 秒显示一次系统信息,共显示 5 次
leazhi@leazhi-ubuntu2310:~/Templates$ vmstat 2 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b 交换 空闲 缓冲 缓存 si so bi bo in cs us sy id wa st
10 0 0 110996152 700956 8338180 0 0 35 108 7888 58 25 13 61 0 0
2 0 0 110978620 700956 8341320 0 0 0 6 52826 56738 8 5 87 0 0
4 0 0 110999888 700964 8339148 0 0 0 62 10272 46492 9 2 89 0 0
4 0 0 110992476 700988 8341688 0 0 0 284 9968 47885 10 3 88 0 0
3 0 0 111007416 700988 8336240 0 0 0 0 9549 43060 9 2 89 0 0

2.显示内存和磁盘信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 显示内存统计信息
leazhi@leazhi-ubuntu2310:~/Templates$ vmstat -s
131696884 K total memory
13459440 K used memory
12426628 K active memory
6427492 K inactive memory
110989836 K free memory
701012 K buffer memory
8353524 K swap cache
4194300 K total swap
0 K used swap
4194300 K free swap
7726066 non-nice user cpu ticks
700 nice user cpu ticks
3920972 system cpu ticks
18529995 idle cpu ticks
8722 IO-wait cpu ticks
0 IRQ cpu ticks
19956 softirq cpu ticks
0 stolen cpu ticks
41583 non-nice guest cpu ticks
0 nice guest cpu ticks
5458860 K paged in
16619301 K paged out
0 pages swapped in
0 pages swapped out
1212458400 interrupts
1757809728 CPU context switches
1710154941 boot time
101271 forks

# 显示磁盘统计信息
leazhi@leazhi-ubuntu2310:~/Templates$ vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
总用量 merged 扇区 ms 总用量 merged 扇区 ms cur sec
loop0 13 0 26 0 0 0 0 0 0 0
loop1 14 0 48 0 0 0 0 0 0 0
loop2 11 0 28 0 0 0 0 0 0 0
loop3 429 0 11548 21 0 0 0 0 0 0
loop4 9 0 22 1 0 0 0 0 0 0
loop5 1513 0 156754 240 0 0 0 0 0 1
loop6 9 0 22 0 0 0 0 0 0 0
loop7 50 0 3140 11 0 0 0 0 0 0
nvme0n1 131903 18027 10116194 23550 1046123 1075877 33244394 3135754 0 1641
nvme1n1 142 0 6640 19 0 0 0 0 0 0
nvme2n1 149 0 6696 12 0 0 0 0 0 0
loop8 2377 0 61792 73 0 0 0 0 0 0
loop9 5450 0 28658 48 0 0 0 0 0 0
loop10 9 0 30 0 0 0 0 0 0 0
disk- ------------reads------------ ------------writes----------- -----IO------
总用量 merged 扇区 ms 总用量 merged 扇区 ms cur sec
loop11 15 0 78 1 0 0 0 0 0 0
loop12 9 0 24 0 0 0 0 0 0 0
loop13 23 0 102 2 0 0 0 0 0 0
loop14 9 0 32 0 0 0 0 0 0 0
loop15 19 0 102 1 0 0 0 0 0 0
loop16 9 0 22 0 0 0 0 0 0 0
loop17 11 0 56 0 0 0 0 0 0 0
loop18 9 0 22 0 0 0 0 0 0 0
loop19 556 0 41728 32 0 0 0 0 0 1
loop20 21 0 540 0 0 0 0 0 0 0
loop21 31 0 216 2 0 0 0 0 0 0
loop22 10 0 20 0 0 0 0 0 0 0
sda 51474 1 483180 36290 239 71 2744 57567 0 49

# 显示活跃和非活跃内存信息
leazhi@leazhi-ubuntu2310:~/Templates$ vmstat -a
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b 交换 空闲 不活动 活动 si so bi bo in cs us sy id wa st
6 0 0 111014268 6423716 12412568 0 0 35 108 7894 57 25 13 62 0 0

3.显示事件计数和内存分页信息

1
2
3
4
5
6
# 显示事件计数和内存分页统计信息
leazhi@leazhi-ubuntu2310:~/Templates$ vmstat -f
101463 forks

# 每 3 秒显示一次事件计数和内存分页信息,共显示 10 次
# vmstat -f 3 10

4.显示磁盘分区信息

1
2
3
4
5
6
7
8
9
10
# 显示磁盘统计和分区信息
root@leazhi-ubuntu2310:~# vmstat -m # 必须要有 root 权限
Cache Num 总共 大小 Pages
Acpi-ParseExt 585 585 104 39
Acpi-State 4947 4947 80 51
anon_vma 95617 101829 104 39
..........

# 只在第一次迭代时显示磁盘分区信息
vmstat -n -m

扩展用法

1.结合其他命令使用

vmstat 命令可以与其他命令结合使用,实现更多功能。

1
2
3
4
5
# 每 5 秒显示一次 vmstat 信息,并将输出保存到文件中
vmstat 5 > vmstat.log

# 监控指定进程的内存使用情况
pidstat -r -p <PID> 1

2.监控特定资源

通过选择合适的选项,可以专注于监控特定的系统资源。

1
2
3
4
5
6
7
8
# 监控 CPU 使用情况
vmstat 1

# 监控内存使用情况
vmstat -a 1

# 监控磁盘 I/O 活动
vmstat -d 1

高级用法

1.生成图形报告

可以使用第三方工具将 vmstat 输出转换为图形报告,以更直观的方式展示系统资源使用情况。

1
2
3
4
5
6
# 安装 gnuplot 工具
yum install gnuplot

# 生成 CPU 利用率图形报告
vmstat 1 10 | grep -v '^$' > cpu.dat
gnuplot -p -e 'set term png; set output "cpu.png"; plot "cpu.dat" using 13 with line'

2.与其他监控工具结合

vmstat 命令可以与其他系统监控工具结合使用,实现更全面的系统性能监控。

1
2
3
4
5
# 与 sar 命令结合监控系统资源使用情况
sar -u 1 & vmstat 1

# 与 top 命令结合监控进程和系统资源
top & vmstat 1

通过以上实例和扩展用法,相信你已经对 vmstat 命令有了更深入的了解。它是一个非常有用的系统资源监控工具,可以帮助我们及时发现和解决系统性能问题。如果你还有任何疑问或需要进一步探讨,欢迎随时向我提出。