vmstat 命令详解

作者: jijs | 来源:发表于2018-01-13 23:54 被阅读116次

    概述

    vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、IO、系统、CPU活动进行监控。

    vmstat 命令

    -V:显示vmstat版本信息。
    -n:只在开始时显示一次各字段名称。
    -a:显示活跃和非活跃内存
    -d:显示磁盘相关统计信息。
    -p:显示指定磁盘分区统计信息
    -s:显示内存相关统计信息及多种系统活动数量。
    -m:显示slabinfo
    -S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
    -f:显示从系统启动至今的fork数量 。

    delay:刷新时间间隔。
    count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。

    vmstat 命令说明


    该命令默认显示监控5部分:procs、memory、swap、io、system、cpu信息。具体列信息说明如下:

    Procs(进程)

    r: 等待运行的进程数
    b: 处在非中断睡眠状态的进程数

    Memory(内存) 单位:KB

    swpd: 虚拟内存使用大小
    free: 空闲的内存
    buff: 用作缓冲的内存大小
    cache: 用作缓存的内存大小

    Swap (单位:KB)

    si: 从交换区写到内存的大小
    so: 每秒写入交换区的内存大小

    IO (单位:块/秒)

    bi: 每秒读取的块数
    bo: 每秒写入的块数

    System (系统)

    in: 每秒中断数,包括时钟中断。
    cs: 每秒上下文切换数。

    CPU(以百分比表示):

    us: 用户进程执行时间(user time)
    sy: 系统进程执行时间(system time)
    id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。
    wa: 等待IO时间

    使用示例

    1. 不使用参数

    如果使用vmstat命令不使用参数,那么只显示一条监控信息

    2. 间隔1秒

    如果只使用一个间隔时间参数,那么,vmstat会每秒钟打印一条监控信息,直到手动关闭监控程序为止。

    2. 每隔1秒打印一条,总共打印5条

    vmstat 命令实战

    通过运行下面程序,使用vmstat进行监控

    public class VMStat {
        public static void main(String[] args) {
            String type = "0";
            if (args.length>0) {
                type = args[0];
            }
            test(type);
        }
    
        public static void test(String type) {
            if ("1".equals(type)) {
                new Thread(new ThreadSwitchTask()).start();
                new Thread(new ThreadSwitchTask()).start();
            } else if ("2".equals(type)) {
                new Thread(new IOTask()).start();
            } else if ("3".equals(type)) {
                new Thread(new IOTask()).start();
            } else {
                new Thread(new ThreadSwitchTask()).start();
                new Thread(new ThreadSwitchTask()).start();
                new Thread(new IOTask()).start();
                new Thread(new BusyCPUTask()).start();;
            }
        }
    
        public static class ThreadSwitchTask implements Runnable {
            @Override
            public void run() {
                while (true) {
                    try {
                        TimeUnit.MILLISECONDS.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    Thread.yield();
                }
            }
        }
    
        public static class IOTask implements Runnable {
            @Override
            public void run() {
                while (true) {
                    try (FileOutputStream fos = new FileOutputStream(new File("file.txt"))) {
                        for (int i = 0; i < Integer.MAX_VALUE; i++) {
                            fos.write(i);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
    
                    try (FileInputStream fos = new FileInputStream(new File("file.txt"))) {
                        while (fos.read() != -1);
    
                        TimeUnit.SECONDS.sleep(2);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
    
        }
        public static class BusyCPUTask implements Runnable{
            @Override
            public void run() {
                while(true){
                    double d = new Random().nextDouble() * new Random().nextDouble();
                }
            }
            
        }
    }
    

    type=“1”;测试线程上下文切换。
    type=“2”;测试IO读写
    type=“3”;测试CPU运算能力

    type=“1”


    当执行 ThreadSwitchTask 类时,发现线程上下文切换明显增加。

    type=“2”


    当执行IOTask类时,可以看出像磁盘中写入了2W多个磁盘块。
    发现读的时候没有从磁盘中读取,是因为该文件在内存也存在一份,导致直接从内存中读取。

    type=“3”


    当执行BusyCPUTask类的时候,发现id空闲的cpu变成了50%了,因为我电脑是是双核CPU。

    想了解更多精彩内容请关注我的公众号

    相关文章

      网友评论

        本文标题:vmstat 命令详解

        本文链接:https://www.haomeiwen.com/subject/ixrhoxtx.html