• Linux下如何使用 vmstat 命令


    vmstat 是 virtual memory statistics 的缩写,它是Linux下一个非常有用的监控工具,除了内存之外,还提供 块 IO、CPU 时间 等额外的信息!

    一、语法

    vmstat 命令的执行不需要特殊的权限,普通用户就可以执行,其语法形式如下

    vmstat [options] [delay [count]]
    

    delay 表示数据更新间隔,单位是秒,如果没有指定此值,表示系统启动以来的平均时间,而且此时只输出一次结果!

    count 表示输出次数,如果没有指定该值,但是指定了 delay 的值,则表示无限次!

    二、结果字段说明

    在命令行输入 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 
    3  0      0 991324    932 537336    0    0     0     0    3    4  0  0 100  0  0
    

    结果中有许多的字段,下表列出了每个字段的详细说明:

    字段 说明
    r 可运行进程的数量,包括运行态和就绪态
    b 处于不可中断睡眠状态的进程数量
    swpd 虚拟内存使用量
    free 空闲内存
    buff 用作buffer的内存数量
    cache 用作cache的内存数量
    si 从磁盘换入内存的数量
    so 从内存换出到磁盘的数量
    bi 从块设备接收的块,单位:块/秒
    bo 发送到块设备的块,单位:块/秒
    in 每秒中断数,包括时钟中断
    cs 每秒上下文切换数
    us 用户态执行时间
    sy 内核态执行时间
    id CPU空闲时间
    wa 等待IO的时间
    st 从虚拟机中偷取的时间

    表中第二行 处于不可中断睡眠状态的进程数量,这里的不可中断是指 一个进程在执行某些系统调用时进入的状态,在这种状态下,进程被阻塞,并且不能被中断,直到完成系统调用!

    字段结果按照颜色分成了几部分,从上到下依次是:进程信息,内存信息,IO信息,系统中断和上下文,CPU时间!

    内存信息中数值的单位默认是 KB ( 1024 kbytes ), CPU时间字段并不表示具体的时间,而是占总CPU时间的一个百分比!

    三、常见选项

    选项 说明
    -a 显示活跃和非活跃内存
    -f 从系统启动至今 fork 的数量,包括 fork、vfork 以及 clone 等系统调用
    -s 显示系统事件计数以及内存统计信息
    -d 报告磁盘统计信息
    -D 统计活动磁盘信息
    -p 指定分区的详细信息
    -t 追加一列时间显示
    -S 按照指定字节单位显示
    -w 结果按照宽模式显示
    -V vmstat的版本

    常见用法

    vmstat 命令主要用于识别系统的瓶颈,统计数据的时候,它不会包含自身进程!

    • 按照指定时间间隔和次数输出
    $ vmstat 2 10
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     2  0  12552 148356 234324 3382956    0    0     1    21    4    4  2  2 97  0  0
     1  0  12552 148264 234324 3382980    0    0     0     0 14974 27478  3  2 96  0  0
     1  0  12552 148232 234324 3382984    0    0     0    14 14384 27181  3  2 96  0  0
     0  0  12552 148376 234332 3383052    0    0     0   204 14197 26812  4  2 94  0  0
     0  0  12552 148512 234332 3383088    0    0     0     4 14398 27155  3  2 95  0  0
     0  0  12552 147892 234332 3383128    0    0     0   210 15515 28802  3  2 95  0  0
     1  0  12552 148388 234332 3383156    0    0     0     0 15147 28042  3  2 95  0  0
     0  0  12552 148264 234332 3383168    0    0     0     4 14380 27395  3  1 96  0  0
     0  0  12552 148264 234336 3383216    0    0     0   198 14430 27008  3  1 95  0  0
     2  0  12552 148140 234336 3383252    0    0     0     6 14233 27161  3  2 95  0  0
    

    2 表示每隔 2 秒输出一次结果,10 表示总共输出 10 次,10 次之后程序自动结束!

    • 修改内存显示单位

    输出的结果中,内存数据的单位默认是 KB,可以通过 -S 选项调整显示的单位,有下面几种单位可供选择!

    注意:-S 选项对 si、 so 字段无效

    k    # 1000 bytes
    K    # 1024 bytes
    m    # 1000 * 1000 bytes
    M    # 1024 * 1024 bytes
    

    20220212191808

    上图中第一个结果中内存数据显示单位是 KB , 第二个结果中单位是 MB,将第一个结果对应字段的数值除以 1024 就得到了第二个结果

    • 活跃内存和非活跃内存

    20220212191911

    inact 是非活跃内存,active 是活跃内存

    活跃内存是进程在使用的内存,非活跃内存是未运行进程的内存!

    • 系统启动以来 fork 的数量

    这里的 fork 数量包括 fork、vfork 以及 clone 等系统调用!

    $ vmstat -f
            11952 forks
    $ vmstat -f
            11968 forks
    $ vmstat -f
            11983 forks
    

    我们每次在控制台执行一次命令,系统就会 fork 一个新的进程来执行命令,比如像上面的例子,每执行一次 vmstat -f 命令,系统就会 fork 一个新进程!

    这个选项还可以用于统计某个操作消耗多少次 fork 调用,只需要在操作前后各执行一次 vmstat -f 命令,比较两次结果的差值即可!

    • 每行追加一列时间

    追加一列时间显示,有助于比较一段时间内的结果!

    20220212192124

    • 按照宽模式显示

    vmstat 结果中的某些字段的数字有时会比较长,而且跟字段名的位置有偏差, 不太适合人类的观看习惯,-w 选项可以按照宽模式显示数据,使结果看起来更直观,下图是分别未使用宽模式和使用了宽模式的一个对比!

    20220212193842

    • 统计磁盘信息

    20220212193922

    磁盘信息主要分三个方面:读、写、IO ,读和写以毫秒为单位,IO以秒为单位!

    读
        total:     成功读取的总数
        merged:    分组读取(产生一个 IO)
        sectors:   成功读取的扇区数
        ms:        读取花费的毫秒
        
    写
        total:      成功写入的总数
        merged:     分组写入(产生一个 IO)
        sectors:    成功写入的扇区数
        ms:         写花费的毫秒
        
    IO
        cur:    正在进行的IO
        s:      IO花费的秒数
    
    • 指定磁盘分区信息

    20220212194017

    上图中,输出结果显示 sda1 分区设备的信息,它们包括:读计数、读取的扇区数,写计数,分区写请求总数!

  • 相关阅读:
    剖析并利用Visual Studio Code在Mac上编译、调试c#程序【转】
    算法题—百灯判熄
    聪明的情侣算法题
    C#中&与&&的区别
    C# 日期格式精确到毫秒 【转】
    C#关于窗体的keysdown事件,无法获取到焦点
    百度,迅雷,华为,阿里巴巴笔试面试
    对 Linux 新手非常有用的 20 个命令
    阿里面试题2015
    Ant工具 ant的安装与配置 ant作用
  • 原文地址:https://www.cnblogs.com/lvzhenjiang/p/15887199.html
Copyright © 2020-2023  润新知