虛擬機工具
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
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");
}
}
}
}
}
}
開始診斷:
查看進程 把運行信息 輸出到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
程序:
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文件 然後分析一波。。
點關注不迷路: