jvm之虚拟机工具篇(三)

2022-10-25 16:16:22 浏览数 (1)

虚拟机工具

jps

(java process status) 虚拟机进程状况工具

  • jps -l 主类全名
  • jps -m 运行传入主类的参数
  • jps -v 虚拟机参数

jstat

(JVM Statistics Monitoring Tool) 虚拟机统计信息监视工具

类加载,内存,垃圾收集,jit编译信息、

E 代表eden区 o代表old区 m代表元空间metaspace YGC是young GC的次数 YGCT是youngGC所花的时间 单位是秒 FGC是Full GC的次数 FGCT是FullGC所花的时间 GCT是所有GC所花的时间 实例:

死锁程序:

代码语言:javascript复制
package jvm;

public class TestDeadLock {

    public void run() {
        MyThread myThread = new MyThread();
        new Thread(myThread,"张三").start();
        new Thread(myThread,"李四").start();

    }

    public static void main(String[] args) {
        new TestDeadLock().run();
    }

    class MyThread implements Runnable {
        private Object o1 = new Object();
        private Object o2 = new Object();
        private boolean flag = true;


        @Override
        public void run() {
            if (flag) {
                flag = false;
                synchronized (o1) {
                    System.out.println(Thread.currentThread().getName() " have o1");

                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (o2) {
                        System.out.println(Thread.currentThread().getName() " have o2");
                    }
                }
            }else {
                flag = true;
                synchronized (o2) {
                    System.out.println(Thread.currentThread().getName() " have o2");
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (o1) {
                        System.out.println(Thread.currentThread().getName() " have o1");
                    }
                }

            }
        }
    }
}

开始诊断:

查看进程 把运行信息 输出到20324这个文件中

jinfo

Java配置信息工具 实时调整和查看虚拟机参数 • -XX:[ /-]option • -XX:option=value

jmap

Memory Map for Java Java内存映像工具

• jmap -dump:formart=b,file=filepath pid • jmap -histo pid

to print histogram of java object heap; if the “live”

jmap -heap pid

打印堆信息

jhat

JVM Heap Analysis Tool 虚拟机堆转储快照分析工具

jstack

Stack Trace for Java Java堆栈跟踪工具

jconsole

java Monitoring and Management Console Java监视与管理控制台

eclipse memory analyzer

程序:

代码语言:javascript复制
package jvm;

import java.util.ArrayList;
import java.util.List;

/**
 * 生成dump文件
 * -verbose:gc -XX: PrintGCDetails -Xms10M -Xmx10M -Xmn5M -XX: HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:/server3.dump
 */
public class Demo6 {

    static List<byte[]> array = new ArrayList<>();

    public static void main(String[] args) {
        byte[] b1 = new byte[2*1024*1024];
        byte[] b2 = new byte[2*1024*1024];
        byte[] b3 = new byte[2*1024*1024];
        byte[] b4 = new byte[4*1024*1024];
        array.add(b1);
        array.add(b2);
        array.add(b3);
        array.add(b4);
    }
}

日志信息:

用eclipse memory analyzer打开dump文件 然后分析一波。。

0 人点赞