jps(查看JVM进程基本信息)
1.jps 查看所有jvm进程(显示进程id和执行的java入口类)
2.jps -m 查看jsp数据+main方法参数
3.jps -v 查看jvm启动参数(堆大小,使用编码等)
jstat(监视虚拟机各种运行状态信息)
jstat -<option> [-t](jvm运行时间) [-h<lines>](多少行重新打印头) <vmid> [<interval>(打印间隔时间) [<count>(打印次数)]]
1.jstat -class vmid(jvm进程id) 查看对应JVM进程类加载详细信息
2.jstat -gc -h10 vmid 1000 10 查看gc信息每10行打印头部信息,1000ms打印一次,一共打印10次
jinfo(查看jvm相关信息和系统属性信息)
1.jinfo vmid 查看jvm flag信息和系统属性信息
2.jinfo -flags vmid 查看jvm flag信息
3.jinfo -sysprops vmid 查看系统属性信息
jmap & jhat (生成dump文件和分析dump文件)
1.jmap -dump:format=b,file=path vmid 导出dump文件(oom自动导出dump文件 -XX:+HeapDumpOnOutOfMemoryError dump文件目录 -XX:HeapDumpPath=d:)
2.jhat path 使用日志文件,启动7000端口,可以浏览dump信息
histogram可以查看内存占用/对象数量 的分布图
jstack(监控线程状态)
jstack vmid 查看进程的线程状态
private static void test5() throws Exception{
//睡眠状态
new Thread(()->{
try {
Thread.sleep(10000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
},"睡眠线程1").start();
//死锁
Object o=new Object();
Object o1=new Object();
new Thread(()->{
synchronized (o){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("死锁线程1 获得 o锁");
synchronized (o1){
System.out.println("死锁线程1 获得 o1锁");
}
}
},"死锁线程1").start();
new Thread(()->{
synchronized (o1){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("死锁线程2 获得 o1锁");
synchronized (o){
System.out.println("死锁线程2 获得 o锁");
}
}
},"死锁线程2").start();
System.out.println("线程执行完毕");
}
可以查看线程的状态,比如死锁,睡眠等
javap(反编译)
反编译为字节码,可以看到常量池,锁相关语义