虚拟机工具
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文件 然后分析一波。。