vmstat 是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可实时动态监视操作系统的虚拟内存、进程、CPU活动。vmstat 可以指定采样间隔,以允许近实时地观察系统活动。vmstat 工具可在大多数 Unix 和类 Unix 操作系统上使用,例如 FreeBSD,Linux 或 Solaris。
什么是 vmstat
vmstat 是一个内置的 Linux 系统监控工具,它的主要工作是测量系统对虚拟内存的使用。Linux 服务器都有有限数量的随机存取存储器(RAM,也就是内存)。Linux 系统可能出于多种原因耗尽内存,例如对操作系统及其运行的应用程序的需求。发生这种情况时,Linux 内核会将程序交换或分页到计算机的存储设备,称为交换空间(SWAP)。通常,这是硬盘驱动器或固态驱动器存储的保留区域。当 RAM 不可避免时,它被用作虚拟内存。随着 RAM 被释放,换出的数据或代码被交换回基于 RAM 的主存储器。
使用虚拟内存时系统性能急剧下降,这是因为即使硬件(例如快速 SSD)用于虚拟内存,服务器的交换 I/O 速度也比 RAM 慢得多。此外,当 Linux 使用虚拟内存时,它会花费更多的 CPU 周期来管理虚拟内存交换。
这意味着 Linux 系统管理员必须关注服务器的内存使用情况。没有人希望系统变慢。当它发生并且管理员需要进行故障排除时,虚拟内存可能是罪魁祸首。由于虚拟内存对系统性能有很大影响,因此 vmstat 对其进行监控必不可少。除了监控虚拟内存分页,vmstat 还测量进程、I/O、CPU 和磁盘调度。
怎样使用 vmstat 进行监控
我们既可以将 vmstat
作为交互式程序运行,也可以在 shell 程序中运行。当不带任何参数运行 vmstat 时,它会显示自服务器上次重新启动以来每个元素的平均值,而不是当前值的快照。
使用以下命令运行 vmstat
:
vmstat
可以看到类似输出:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 1171312 69752 2231152 0 0 0 13 10 23 0 0 100 0 0
请注意 vmstat
如何返回有关系统进程、内存、交换、输入和输出、系统中断和上下文切换以及 CPU 的信息。要了解有关每个列和值的更多信息,可以使用 man vmstat
命令来查看 vmstat
的手册页。
vmstat
命令行选项提供有关系统的更多信息。vmstat
语法如下:
vmstat [-V] [-n] [delay [count]]
字段说明:
- -V 表示打印出版本信息;
- -n 表示在周期性循环输出时,输出的头部信息仅显示一次;
- delay 是两次输出之间的延迟时间;
- count 是指按照这个时间间隔统计的次数。
例如,可以使用以下命令,在空闲系统上每 5 秒运行 5 次 vmstat
:
vmstat 5 5
输出结果类似如下:
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 1166396 70768 2233228 0 0 0 13 10 24 0 0 100 0 0 0 0 0 1165568 70776 2233352 0 0 0 8 121 224 0 0 99 0 0 0 0 0 1166608 70784 2233352 0 0 0 53 108 209 0 0 100 0 0 0 0 0 1166608 70784 2233352 0 0 0 0 75 176 0 0 100 0 0 0 0 0 1166576 70788 2233352 0 0 0 4 76 177 0 0 100 0 0
更多 vmstat 使用方法
vmstat
通常以 1 秒的间隔运行一小段时间,具体取决于管理员尝试诊断的问题类型。以下示例说明 1 秒 20 次的间隔:
vmstat 1 20
类似输出:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 3996 168488 57100 1368636 0 0 1 2 0 0 3 1 97 0 0 0 3996 168604 57100 1368728 0 0 0 0 144 303 1 0 100 0 0 0 3996 168604 57100 1368984 0 0 256 0 162 464 1 0 99 0 0 0 3996 168604 57100 1368972 0 0 0 0 239 638 3 0 97 0 0 0 3996 168604 57100 1368952 0 0 0 0 242 529 1 1 99 0 0 0 3996 168604 57100 1368952 0 0 0 0 148 430 1 0 99 0 1 0 3996 168604 57100 1368952 0 0 0 0 222 451 6 0 94 0 0 0 3996 168604 57100 1368952 0 0 0 0 141 270 2 0 98 0 0 0 3996 168604 57100 1368952 0 0 0 0 166 450 1 0 99 0 0 0 3996 168604 57100 1368952 0 0 0 0 133 410 0 0 99 0 0 0 3996 168604 57100 1368952 0 0 0 0 196 398 0 0 99 0 0 0 3996 168604 57100 1368952 0 0 0 0 187 510 1 0 100 0 0 0 3996 168604 57108 1368952 0 0 0 16 263 677 2 0 97 1 0 0 3996 168604 57108 1368952 0 0 0 0 205 431 1 0 98 0 0 0 3996 168604 57108 1368964 0 0 0 0 179 467 1 0 98 0 0 0 3996 168604 57108 1368964 0 0 0 0 169 446 2 0 98 0 0 0 3996 168604 57108 1368964 0 0 0 0 202 365 2 0 98 0 0 0 3996 168604 57108 1369208 0 0 256 0 226 458 2 1 96 0 0 0 3996 168604 57108 1369208 0 0 0 40 202 501 2 0 98 0 0 0 3996 168604 57108 1369220 0 0 0 0 154 295 2 0 98 0
如果想要实时报告系统状态,可以不带 [count]
参数运行 vmstat
。在这些情况下,可能需要 30 秒或更长时间的间隔。
vmstat 30
输出结果:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 3996 167868 57108 1369788 0 0 1 2 0 0 3 1 97 0 0 0 3996 167860 57108 1369920 0 0 0 0 274 604 2 0 98 0 0 0 3996 167860 57108 1369928 0 0 0 0 196 481 1 0 98 0 0 0 3996 167860 57116 1369908 0 0 0 12 164 414 1 1 97 1 0 0 3996 167860 57116 1369892 0 0 0 0 168 320 0 0 100 0 0 0 3996 167860 57116 1369884 0 0 0 0 142 398 1 0 99 0 0 0 3996 167860 57116 1369880 0 0 0 0 175 450 1 1 98 0
可以选择将此输出定向到用于记录的文件,而不是让它在后台终端会话中无休止地运行。要停止 vmstat
进程,可以使用中断字符(^C 或 Control+C)。
在默认操作中,vmstat
以千字节为单位显示内存统计信息。vmstat
认为一个千字节等于 1024 字节。 要生成 1 KB 等于 1000 字节的 vmstat
报告,请使用以下格式:
vmstat -S k 1 10
类似输出如下:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 4091 150192 58982 1422041 0 0 1 2 0 0 3 1 97 0 0 0 4091 150183 58982 1422381 0 0 256 0 201 518 1 0 99 0 2 0 4091 150183 58982 1422356 0 0 0 0 638 1356 7 1 92 0 0 0 4091 150183 58982 1422360 0 0 0 0 859 1087 5 2 93 0 0 0 4091 150183 58982 1422331 0 0 0 0 404 1100 2 0 97 0 0 0 4091 150183 58982 1422331 0 0 0 0 281 601 2 0 97 0 0 0 4091 150183 58982 1422327 0 0 0 0 279 468 3 0 97 0 0 0 4091 150183 58982 1422331 0 0 0 0 250 572 3 0 97 0 0 0 4091 150183 58990 1422323 0 0 0 16 280 598 4 0 95 1 0 0 4091 150183 58998 1422319 0 0 0 52 270 451 3 0 96 1
vmstat
还可以显示以兆字节为单位报告的内存大小的报告。带有参数 -S m
的 vmstat
报告将考虑等于 1000 KB 的单个兆字节,如下所示:
vmstat -S m 1 10
类似输出:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 4 169 58 1404 0 0 1 2 0 0 3 1 97 0 0 0 4 169 58 1405 0 0 0 0 194 508 1 0 98 0 0 0 4 169 58 1405 0 0 0 0 154 443 0 0 99 0 0 0 4 169 58 1405 0 0 0 0 192 380 0 0 100 0 0 0 4 169 58 1405 0 0 0 0 287 766 3 0 97 0 1 0 4 169 58 1405 0 0 0 0 222 583 1 1 99 0 0 0 4 169 58 1405 0 0 0 36 166 304 1 0 99 0 0 0 4 169 58 1405 0 0 0 0 189 473 1 0 99 0 0 0 4 169 58 1405 0 0 0 0 164 430 1 0 99 0 0 0 4 169 58 1405 0 0 0 0 186 343 0 0 100 0
vmstat
还能够显示兆字节,使用参数 -S M
即可,单个兆字节等于 1024 千字节。请考虑以下示例:
vmstat -S M 1 10
如何分析 vmstat 输出结果
最后介绍一下如何查看分析 vmstat 的输出结果。
vmstat
报告描述了 Linux 系统的当前状态,vmstat
的输出显示在多个列中,以下部分简要概述了每列中报告的数据。
Procs(进程)
- r: 运行队列中进程数量
- b: 等待IO的进程数量
Memory(内存)
- swpd: 使用虚拟内存大小
- free: 可用内存大小
- buff: 用作缓冲的内存大小
- cache: 用作缓存的内存大小
Swap
- si: 每秒从交换区写到内存的大小
- so: 每秒写入交换区的内存大小
IO(现在的Linux版本块的大小为1024bytes)
- bi: 每秒读取的块数
- bo: 每秒写入的块数
system
- in: 每秒中断数,包括时钟中断
- cs: 每秒上下文切换数
CPU(以百分比表示)
- us: 用户进程执行时间(user time)
- sy: 系统进程执行时间(system time)
- id: 空闲时间(包括IO等待时间)
- wa: 等待IO时间
搬瓦工优惠/性价比套餐推荐
搬瓦工优惠码:BWH3HYATVBJW,优惠6.58%,全场可用。下面表格整理了更多的搬瓦工优惠套餐。
方案 | 内存 | CPU | 硬盘 | 流量/月 | 带宽 | 机房 | 价格 | 购买 |
---|---|---|---|---|---|---|---|---|
CN2 (最便宜) |
1GB | 1核 | 20GB | 1TB | 1Gbps | DC3 CN2 DC8 ZNET |
$49.99/年 | 购买 |
CN2 | 2GB | 1核 | 40GB | 2TB | 1Gbps | $52.99/半年 $99.99/年 |
购买 | |
CN2 GIA-E (最推荐) |
1GB | 2核 | 20GB | 1TB | 2.5Gbps | DC6 CN2 GIA-E DC9 CN2 GIA 日本软银 JPOS_1 联通荷兰 EUNL_9 |
$49.99/季度 $169.99/年 |
购买 |
CN2 GIA-E | 2GB | 3核 | 40GB | 2TB | 2.5Gbps | $89.99/季度 $299.99/年 |
购买 | |
HK | 2GB | 2核 | 40GB | 0.5TB | 1Gbps | 香港 CN2 GIA | $89.99/月 $899.99/年 |
购买 |
HK | 4GB | 4核 | 80GB | 1TB | 1Gbps | $155.99/月 $1559.99/年 |
购买 |
选择建议:
- 入门:洛杉矶 CN2 套餐,目前最便宜,可选 CN2 GT 机房,入门之选。
- 推荐:洛杉矶 CN2 GIA-E 套餐,价格适中,速度超快,可选机房多,性价比最高。
- 高端:香港 CN2 GIA 套餐,价格较高,但是无可挑剔。