转载

【深入浅出-JVM】(41):vmstat 命令

procs

  • r

    运行队列中进程数量

    -b

    等待io的进程数量

memory

  • swpd
    使用虚拟内存大小
  • free
    空闲物理内存大小
  • buff
    缓冲内存大小
  • cache
    缓冲内存大小

    swap

  • si 每秒从磁盘到内存交换页数量 kb/s
  • so 每秒从内存写入磁盘的交换页数量 kb/s

    io

  • bi

    每秒读取的块数

  • bo
    每秒写入的快数

    system

  • in
    每秒中断数
  • cs 每秒上下文切换数

cpu

  • us
    用户态cpu执行时间
  • sy
    内核系统执行时间
  • id
    空闲时间百分比
  • wa
    IO 等待时间
  • st

例子

频繁切换上下文

import java.util.Random;

/**
 * @version 1.0
 * @author: mousycoder
 * @date: 2019-07-18 15:24
 */
public class HoldLockMain {

    public static Object[] lock = new Object[10];

    public static Random r = new Random();

    static {
        for (int i = 0; i < lock.length; i++) {
            lock[i] = new Object();
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < lock.length * 2; i++) {
            new Thread(new HoldLockTask(i / 2)).start();
        }
    }

    public static class HoldLockTask implements Runnable {

        private int i;

        public HoldLockTask(int i) {
            this.i = i;
        }


        @Override
        public void run() {

            try {
                while (true) {
                    synchronized (lock[i]) {
                        if (i % 2 == 0) {
                            lock[i].wait(r.nextInt(10));
                        } else {
                            lock[i].notifyAll();
                        }
                    }
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }


    }
}

输出 vmstat 1 4

【深入浅出-JVM】(41):vmstat 命令

可见上下文切换频繁

原文  http://mousycoder.com/thinking-in-jvm/41/
正文到此结束
Loading...