前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 vmstat 监控系统性能

使用 vmstat 监控系统性能

作者头像
FesonX
发布2018-09-10 13:17:06
6640
发布2018-09-10 13:17:06
vmstat
vmstat

什么是 vmstat?

vmstat 是一种实时收集和报告有关系统内存,交换和处理器资源利用率数据的工具。它可用于确定有关性能的根本原因以及与内存使用相关的问题。

如何使用 vmstat

使用 vmstat 命令运行程序。参考以下输出:

代码语言:txt
复制
$ 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

此数据提供自上次重启以来虚拟内存和系统使用情况的平均视图。通常,使用以下命令形式:

代码语言:txt
复制
vmstat [interval] [count]

在此示例中,第一行数据提供自上次启动以来的平均值。到达 [count] 时间后接着后续报告,每隔 [interval] 秒报告系统当前的状态数据。

vmstat 命令

vmstat 通常以 1 秒的间隔运行一小段时间,具体时长取决于管理员尝试诊断的问题类型。以下示例呈现了一个每隔 1 秒输出,共输出 20 次的命令:

代码语言:txt
复制
$ 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 秒或更长的间隔可能是可取的。

代码语言:txt
复制
$ 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 报告,请使用以下格式命令:

代码语言:txt
复制
$ 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 万字节 ),如下所示:

代码语言:txt
复制
$ 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。请参考以下示例:

代码语言:txt
复制
$ 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 输出

vmstat 报告描述了 Linux 系统的当前状态。在诊断与性能相关的问题时,有关系统运行状态的信息非常有用。Linode 支持部门通常会要求提交 vmstat 报告,以便更准确地诊断某些问题; 但是,在有了解一些关于此数据所代表的内容的背景下,你可以自己解释这些数据。

vmstat 的输出显示在多个列中。以下简要概述了每列报告的数据内容。

Procs (进程)

procs 数据报告处理等待运行的作业数量,并可以让你确定是否有让系统从运行流畅变"阻塞"的进程。

r 列显示等待访问处理器的进程总数。b 列显示处于“休眠”状态的进程总数。

这些值经常是0

Memory (内存)

memory 部分显示的信息提供与命令 free -m 相同的内存使用量数据。

swapd(swapped, 交换) 列显示了多少内存已经被交换到交换文件或磁盘。free 列报告尚未分配的内存量。buff(buffers, 缓冲区”) 列报告使用分配的内存量。cache 列报告可以交换到磁盘的已分配内存量,如果另一个任务需要资源,则报告未分配的内存量。

Swap (交换)

swap 报告内存发送到交换系统或从交换系统检索的速率。通过与总磁盘活动分开报告“交换”,vmstat 可以确定与交换系统相关的磁盘活动量。

si 列报告每秒从交换移动到“实际”内存的内存量。so 列报告每秒从“实际”内存交换的内存量。

I/O (输入/输出)

io 部分根据读写的块展示每秒的输入和输出活动量。

bi 列报告每秒从磁盘接收的块数,即 “块入( Block in)”。bo列报告每秒发送到磁盘的块数,即 "块出 (Block out)"。

System (系统)

system 部分反映每秒系统操作数的数据。

in 列报告每秒系统中断的数量,包括系统时钟中断。cs 列报告系统为处理所有任务而进行的上下文切换次数。

CPU (处理器)

cpu 部分报告了系统 CPU 资源的使用情况。此部分中的列经常加 100 并反映“可用时间百分比”。

us 列报告处理器在用户区 (userland) 任务或所有非内核 (non-kernel) 进程上花费的时间。sy 列报告处理器在内核相关任务上花费的时间。id 列报告处理器空闲的时间量。wa 列报告处理器在能够继续处理任务之前等待 IO 操作完成所花费的时间。

更多信息

有关本主题的更多信息, 请参考以下资源。我们希望所提供的这些资料是有用的,但请注意,我们无法保证外部托管材料的准确性或及时性。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 vmstat?
  • 如何使用 vmstat
  • vmstat 命令
  • 如何解释 vmstat 输出
    • Procs (进程)
      • Memory (内存)
        • Swap (交换)
          • I/O (输入/输出)
            • System (系统)
              • CPU (处理器)
              • 更多信息
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档