使用 java visualVM分析系统gc后,dump日志
系统gc了,排查了半天是半年前的一个bug,在及其特殊的操作情况下会导致全表扫描。
记录下分析dump日志的过程。
工具
使用的java自带的 jvisualvm 工具
双击打开即可,但是有个问题就是这个工具初始工作内存分得256m,分析太大的dump文件,很慢。
解决办法,修改如下的配置文件,吧参数调大点就行。
-J-Xms1024m -J-Xmx4096m
1 打开后,文件-装入,选择下载好的dump文件
2 切换到 类 标签页面,根据大小找到使用最多的自己项目的实体,如下所示。
3 鼠标双击,自动跳转到实例数标签页,在引用模块中,找到垃圾回收根节点标志的节点,鼠标右键选择在线程中显示。
4 现在找到产生大对象的线程了,然后就是分析这个线程是自己项目的那个功能。
5 线程请求入口
6 线程最终的执行方法,可以看到是执行了一个sql查询,点击图中的链接。
7 再次跳转到实例数标签页,在字段中可以看到有个sql,打开后双击value。
8 再次跳转到实例数标签页,这次数组项中,可以看到造成大对象的sql如下。
9 ok 大对象的线程入口,及造成大对象的原因都找到了,剩下的就是翻代码,堵上漏洞。
10 完结撒花