专栏首页使用 vmstat 监控系统性能

使用 vmstat 监控系统性能

vmstat

什么是 vmstat?

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

如何使用 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 命令

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 输出

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 操作完成所花费的时间。

更多信息

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

本文的版权归 FesonX 所有,如需转载请联系作者。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Apache Spark中使用DataFrame的统计和数学函数

    我们在Apache Spark 1.3版本中引入了DataFrame功能, 使得Apache Spark更容易用. 受到R语言和Python中数据框架的启发, ...

    FesonX
  • 分析DAO的漏洞

    我敢肯定每个人都听说过有关DAO被一个黑客利用递归以太坊发送漏洞截获1.5亿美元的重大新闻。

    FesonX
  • 利用 Docker 快速实现 MySQL binlog 主从备份

    binlog 是MySQL数据库的二进制日志,用于记录用户对数据库操作的SQL语句(不包括 SELECT),可以在配置文件开启,也可以在 MySQL 客户端开启...

    FesonX
  • Confluence 6 配置附件大小 原

    https://www.cwiki.us/display/CONF6ZH/Configuring+Attachment+Size

    HoneyMoose
  • 优选!NTP校时(NTP服务器)全城智慧监控方案

    过去十年,各地平安城市建设如火如荼,点位骤增,数据爆炸性增长,由此给公安业务应用带来了严峻的技术挑战和困难:

    NTP网络同步时钟
  • Pytorch optimizer.step() 和loss.backward()和scheduler.step()的关系与区别

    首先需要明确optimzier优化器的作用, 形象地来说,优化器就是需要根据网络反向传播的梯度信息来更新网络的参数,以起到降低loss函数计算值的作用,这也是机...

    于小勇
  • 如何界定代码腐化?

    这个问题Scope很大,关于代码腐化的定义,仁者见仁、智者见智。在我看来,最好不要去做代码腐化的鉴定,在编写代码的过程中,时刻关注代码质量,在点点滴滴将代码质量...

    袁慎建@ThoughtWorks
  • GitHub项目推荐 | 场景文字图像增广工具 Scene Text Image Transformer

    Scene Text Image Transformer是用于场景文本数据增强的工具。 我们提供的工具可以避免过度拟合并获得模型的稳健性。

    AI研习社
  • 使用 Java REPLJava REPL

    https://github.com/albertlatacz/java-repl/releases

    一个会写诗的程序员
  • 推荐一款神器:让你看透Python 代码执行过程

    对于一些刚入门 Python 的朋友来说,代码稍微复杂些就难以搞懂代码内部到底是怎么运行的了,而且有时一运行就报错,难以一下发现错误,只会用 Print 去慢慢...

    double

扫码关注云+社区

领取腾讯云代金券