1 jvm工具有哪些?
在jdk的bin目录下,可见的都是jvm的工具。
2 每个工具是干什么的?
用于处理OOM或者fullgc时分析原因的工具
定位线程长时间未反应的原因。
可以在lib目下的tools.jar包中可以看到具体的工具是怎么实现的。可以将jar包拖到jd-gui.exe反编译工具中进行源码查看。
3 jps工具
jps,简言之java的ps命令,跟Linux的ps的命令很相似,java虚拟机的进程查看工具,可以列出正在运行的虚拟机进程,并显示执行的主类(main所在的类)和进程id。
- jsp -l
展示pid和执行的主类
- jps -m
输出传入 main 方法的参数。
- jps -v
展示jvm启动参数
4 jstat工具
- jstat -gc pid 毫秒数m 行数n
每隔m毫秒数打印一行,一共打印n行
s0c:第一个幸存区的总大小;s0u:第一个幸存区的已使用大小。
s1c:第二个幸存区的总大小;s1u:第二个幸存区的已使用大小
Ec:伊甸园区的总大小;Eu:伊甸园区已使用的大小
oc:老年代总大小 ;ou:老年代已使用的大小
Mc:方法区的总大小 ;Mu:方法区的总大小
ccsc:压缩类空间文件的总大小;ccsu:压缩类空间文件的已使用大小
ygc:年轻代垃圾回收的次数;ygct:年轻代垃圾回收消耗的时间
fgc:老年代垃圾回收的次数;fgct:老年代垃圾回收消耗的时间
gct:垃圾回收消耗的总时间。
5 jinfo工具
实时地调整和查看虚拟机的各项参数
- jinfo pid
6 jmap工具
用于生成堆转储快照,用于系统复盘。
- jmap -heap pid
展示堆信息
- jmap -histo pid
- 或者分页查看 jmap -histo pid|more
查看类的实例,instances显示实例的个数,byte为大小
- jmap -dump:format=b,file=d:/test.bin pid
生成堆存储快照。
- 展示堆栈溢出的测试类,当运行中堆栈溢出时自动生成转储快照。
public class OOMTest {
public static void main(String[] args){
String a="测试数据";
// 生成100000000个"测试数据"
for(int i=0;i<100000000;i++){
a+=a;
}
}
}
编辑jvm启动参数 -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/
运行,程序即可看到程序报错,并且在d盘下可以看到转储快照。
7 jhat工具
用于分析jmap生成的堆转储快照信息。可以通过浏览器查看分析结果。
- jhat 快照地址
通过浏览器访问结果
8 jstack 工具
生成当前线程的快照。线程快照是当前虚拟机内一条线程正在执行的方法堆栈的集合。
jstack -l pid