vmstat 命令详解

概述

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。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Semaphore 源码分析

    java404
  • 高亮标红

    java404
  • Netty 之 FileRegion 文件传输

    Netty 传输文件的时候没有使用 ByteBuf 进行向 Channel 中写入数据,而使用的 FileRegion。下面通过示例了解下 FileRegion...

    java404
  • .Net Core系列教程(四)—— 基础身份认证

    在ASP.NET 4.5及之前的版本,可以使用FormsAuthenticationTicket来做基础身份认证,现在到了.Net Core中,发现原来的For...

    徐大嘴
  • win10 uwp 气泡 WPF 气泡

    假设尖头宽度 10 高度 5 ,那么可以看到第一个点是 (0,5) 第二个点是 (5,0) 第三个点是 (10,5)

    林德熙
  • git合并时冲突<<<<<<< HEAD

    根据需要删除代码就行了 完事把<<<<<<< ======= >>>>>>都删掉冲突就解决了

    php007
  • Flutter实现底部导航栏效果

    大家最近都在讨论新鲜技术-flutter,小编也在学习中,遇到大家都遇到的问题,底部导航。下面给大家贴出底部导航的编写,主要参考了lime这个项目。

    砸漏
  • DartVM服务器开发(第十七天)--Jaguar_websocket结合Flutter搭建简单聊天室

    我们这里定义了一个ChatMessageData,如果你想需要更多字段,可以再添加

    rhyme_lph
  • Flutter 构建完整应用手册-设计基础知识 顶

    这本食谱包含演示如何在写Flutter应用程序时解决常见问题的食谱。 每个配方都是独立的,可以作为参考帮助您构建应用程序。

    南郭先生
  • Flutter 简易新闻项目目标效果对比简介代码代码地址

    使用flutter快速开发 Android 和 iOS 的简易的新闻客户端 API使用的是 showapi(易源数据) 加载热门微信文章

    gwk_iOS

扫码关注云+社区

领取腾讯云代金券