jvm之虛擬機工具篇(三)

虛擬機工具

jps

(java process status) 虛擬機進程狀況工具

  • jps -l 主類全名

  • jps -m 運行傳入主類的參數

  • jps -v 虛擬機參數

jstat

(JVM Statistics Monitoring Tool) 虛擬機統計信息監視工具

類加載,內存,垃圾收集,jit編譯信息、

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html

image-20200625121020730

E 代表eden區 o代表old區 m代表元空間metaspace YGC是young GC的次數 YGCT是youngGC所花的時間 單位是秒 FGC是Full GC的次數 FGCT是FullGC所花的時間 GCT是所有GC所花的時間
實例:

死鎖程序:

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");
                    }
                }

            }
        }
    }
}

開始診斷:

image-20200625222739645

查看進程 把運行信息 輸出到20324這個文件中

image-20200625223153767

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”

image-20200625224332391

jmap -heap pid

打印堆信息

image-20200625224540800

jhat

JVM Heap Analysis Tool 虛擬機堆轉儲快照分析工具

jstack

Stack Trace for Java Java堆棧跟蹤工具

jconsole

java Monitoring and Management Console Java監視與管理控制檯

image-20200625223249975

eclipse memory analyzer

程序:

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);
    }
}

日誌信息:

image-20200626000810140

用eclipse memory analyzer打開dump文件 然後分析一波。。

image-20200626000703738

點關注不迷路:

image-20200625023509017微信圖片_20200626001332

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章