点击file>>>openheapdump打开一个dump文件
第一个红框:列出内存中的对象,对象的数量和大小
第二个红框:列出最大的对象以及其依赖存活的对象
报表展示可能存在内存溢出的地方
packagecom.study;importjava.util.ArrayList;importjava.util.List;importjava.util.UUID;/***@author:XDZY*@date:2020/08/3013:11*@description:测试内存溢出*/publicclassJvmTest2{/***向集合中输入100万个字符串,每个字符串由1000个uuid组成**@paramargs*/publicstaticvoidmain(String[]args){List
有些时候我们需要查看下jvm中的线程执行情况,比如,发现服务器的CPU的负载突然增高了、出现了死锁、死循环等。由于程序是正常运行的,没有任何的输出,从日志方面也看不出什么问题,所以就需要看下jvm的内部线程的执行情况,然后再进行分析查找出原因。这个时候,就需要借助于jstack命令了,jstack的作用是将正在运行的jvm的线程情况进行快照,并且打印出来。查看JVM中某个程序的所有线程执行情况:
jstack
产生死锁时查看:
jps-l#查看java进程jstack
Javastackinformationforthethreadslistedabove:==================================================="Thread-1":atcom.study.JvmTest3.lambda$main$1(JvmTest3.java:39)-waitingtolock<0x00000000d64b6848>(ajava.lang.Object)-locked<0x00000000d64b6858>(ajava.lang.Object)atcom.study.JvmTest3$$Lambda$2/990368553.run(UnknownSource)atjava.lang.Thread.run(Thread.java:745)"Thread-0":atcom.study.JvmTest3.lambda$main$0(JvmTest3.java:24)-waitingtolock<0x00000000d64b6858>(ajava.lang.Object)-locked<0x00000000d64b6848>(ajava.lang.Object)atcom.study.JvmTest3$$Lambda$1/295530567.run(UnknownSource)atjava.lang.Thread.run(Thread.java:745)JVM调优分析工具JDK自带了很多监控工具,都位于JDK的bin目录下,其中最常用的是jconsole和jvisualvm这两款视图监控工具。jconsole用于对JVM中的内存、线程和类等进行监控。jvisualvm是JDK自带的全能分析工具,可以分析内存快照、线程快照、程序死锁、监控内存的变化、gc变化等。