1. 内存分析工具 Jprofiler
安装JProfiler(本文使用JProfiler11)
链接:https://pan.baidu.com/s/1VBHLIo8hIVGeeLjaBVjcIg
提取码:q5wl
1.在JProfiler的堆遍历器(Heap Walker)中,你可以对堆的状况进行快照并且可以通过选择步骤下寻找感兴趣的对象。堆遍历器有五个视图:
类 Classes
显示所有类和它们的实例,可以右击具体的类"Used Selected Instance"实现进一步跟踪
分配 Allocations
为所有记录对象显示分配树和分配热点
索引 References
为单个对象和“显示到垃圾回收根目录的路径”提供索引图的显示功能。还能提供合并输入视图和输出视图的功能。
时间 Time
显示一个对已记录对象的解决时间的柱状图。
检查 Inspections
显示了一个数量的操作,将分析当前对象集在某种条件下的子集,实质是一个筛选的过程。
2.从服务器上将dump文件拿下来 xxx.hprof
3.使用JProfiler打开
4.查看Classes
5.查看Reference
5.1 选择一个class或者biggest object
5.2 Use Slected Objects
5.3 Incoming references
incoming references
显示这个对象被谁引用 -----点击【显示更多】
outcoming references
显示这个对象引用的其他对象
6.查看, 具体引用的 包名和类全路径
7 .查看Graph
Incoming references
8.查看代码, 定位
9. 扩展:
生成Dump文件,JVM启动时添加参数:
#出现 OOME 时生成堆 dump:
-XX:+HeapDumpOnOutOfMemoryError
#生成堆文件地址:
-XX:HeapDumpPath=/home/xxx/logs/
9.1 linux tomcat
打开/tomcat_home/bin/catalina.sh文件
JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -server -Xms6144m -Xmx6144m -XX:NewSize=384m
-XX:MaxNewSize=450m -XX:PermSize=128m -XX:MaxPermSize=2048m
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/zyf/logs"
注:其中不设-XX:HeapDumpPath时,dump出的文件在/tomcat_home/bin目录下
9.2 linux springboot
nohup java -Xms2048m -Xmx2048m -XX:NewSize=384m -XX:MaxNewSize=450m -XX:PermSize=128m
-XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/darren/logs/
-jar test.jar --spring.profiles.active=prod &
nohup java
-Xms2048m 指定堆内存初始化大小
-Xmx2048m 指定堆内存最大内存大小,
Xms设置和Xmx设置相同是为了避免频繁扩容和GC释放堆内存造成系统开销压力
-XX:NewSize=384m 新生代初始化内存的大小
-XX:MaxNewSize=450m 新生代可被分配的内存的最大上限(注意:该值需要小于-Xmx的值)
-XX:PermSize=128m 非堆区初始化内存分配大小
-XX:MaxPermSize=2048m 非堆区分配的内存的最大上限
-XX:+HeapDumpOnOutOfMemoryError 当JVM发生OOM时,自动生成DUMP文件
-XX:HeapDumpPath=/home/darren/logs/ 生成目录
nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,
如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中
9.3 windows tomcat
打开/tomcat_home/bin/catalina.bat文件
set JAVA_OPTS=%JAVA_OPTS%
-server
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=D:\heapdump
-
运行中的项目生成dump 文件步骤
jps 查看进程pidjmap -dump:live,format=b,file=myFullGcDump.hprof pid
使用工具Jprofiler 或者MAT 工具进行分析