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
0 0 3532 148760 50700 1397880 0 0 1 2 6 6 3 1 97 0
此数据提供自上次重启以来虚拟内存和系统使用情况的平均视图。通常,使用以下命令形式:
vmstat [interval] [count]
在此示例中,第一行数据提供自上次启动以来的平均值。到达 [count]
时间后接着后续报告,每隔 [interval]
秒报告系统当前的状态数据。
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
^C
你可以选择定向输出到文件来进行日志记录,而不是让它在后台终端会话中无休止地运行。要停止该 vmstat
进程,请按下 ^C
或 Control + C 发送中断字符。
在默认操作中,vmstat
以千( K )字节为单位显示内存统计信息。vmstat
认为单个千字节等于 1024 字节。要生成 1 千字节等于 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
还可以显示以兆( M )字节为内存单位的报告。带 -S m
参数的 vmstat
报告会认为一兆等于 1000 千字节( 即 100 万字节 ),如下所示:
$ 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
也可以显示兆字节,如使得单个兆字节等于 1024 千字节的参数 -S M
。请参考以下示例:
$ 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 3 162 55 1339 0 0 1 2 0 0 3 1 97 0
0 0 3 162 55 1339 0 0 0 0 425 700 1 1 98 0
0 0 3 162 55 1339 0 0 0 0 712 997 1 2 97 0
0 0 3 162 55 1339 0 0 0 20 479 1079 3 0 96 1
0 0 3 162 55 1339 0 0 0 0 264 406 2 0 98 0
0 0 3 162 55 1339 0 0 0 0 273 552 3 0 97 0
0 0 3 162 55 1339 0 0 0 0 218 467 1 0 99 0
0 0 3 162 55 1339 0 0 0 0 250 434 1 0 99 0
0 0 3 162 55 1339 0 0 0 0 200 444 2 0 98 0
0 0 3 162 55 1339 0 0 0 0 313 771 3 1 96 0
vmstat
报告描述了 Linux 系统的当前状态。在诊断与性能相关的问题时,有关系统运行状态的信息非常有用。Linode 支持部门通常会要求提交 vmstat
报告,以便更准确地诊断某些问题; 但是,在有了解一些关于此数据所代表的内容的背景下,你可以自己解释这些数据。
vmstat
的输出显示在多个列中。以下简要概述了每列报告的数据内容。
procs
数据报告处理等待运行的作业数量,并可以让你确定是否有让系统从运行流畅变"阻塞"的进程。
r
列显示等待访问处理器的进程总数。b
列显示处于“休眠”状态的进程总数。
这些值经常是0
。
memory
部分显示的信息提供与命令 free -m
相同的内存使用量数据。
swapd
(swapped, 交换) 列显示了多少内存已经被交换到交换文件或磁盘。free
列报告尚未分配的内存量。buff
(buffers, 缓冲区”) 列报告使用分配的内存量。cache
列报告可以交换到磁盘的已分配内存量,如果另一个任务需要资源,则报告未分配的内存量。
swap
报告内存发送到交换系统或从交换系统检索的速率。通过与总磁盘活动分开报告“交换”,vmstat
可以确定与交换系统相关的磁盘活动量。
si
列报告每秒从交换移动到“实际”内存的内存量。so
列报告每秒从“实际”内存交换的内存量。
io
部分根据读写的块展示每秒的输入和输出活动量。
bi
列报告每秒从磁盘接收的块数,即 “块入( Block in)”。bo
列报告每秒发送到磁盘的块数,即 "块出 (Block out)"。
system
部分反映每秒系统操作数的数据。
in
列报告每秒系统中断的数量,包括系统时钟中断。cs
列报告系统为处理所有任务而进行的上下文切换次数。
cpu
部分报告了系统 CPU 资源的使用情况。此部分中的列经常加 100 并反映“可用时间百分比”。
us
列报告处理器在用户区 (userland) 任务或所有非内核 (non-kernel) 进程上花费的时间。sy
列报告处理器在内核相关任务上花费的时间。id
列报告处理器空闲的时间量。wa
列报告处理器在能够继续处理任务之前等待 IO 操作完成所花费的时间。
有关本主题的更多信息, 请参考以下资源。我们希望所提供的这些资料是有用的,但请注意,我们无法保证外部托管材料的准确性或及时性。