最近两天线上的一个job服务持续的报full gc问题,运维的同事把dump文件给我们导了出来。2个多g,把自己使用mat 分析的过程记录下。
下载mat工具,官网下载:https://www.eclipse.org/mat/
自己的是mac,下载后解压。自己遇到个问题:解压后直接打开文件,会提示异常,需要去日志查询。日志显示的是需要在启动配置里面 添加-data,但是把哪个解压后的文件放到应用里面,启动是正常的。
好了之后,打开运维给的dump文件,提示 文件过大。这个时候修改应用里面的mat工具。具体方法为:
3.
修改最大值后
-startup
../Eclipse/plugins/org.eclipse.equinox.launcher_1.5.700.v20200207-2156.jar
--launcher.library
../Eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.1100.v20190907-0426
-vmargs
-Xmx2048m
-Dorg.eclipse.swt.internal.carbon.smallFonts
-XstartOnFirstThread
把-Xmx1024 修改为 2048m.
好了之后,打开dump文件。大约需要几分钟
打开后是上图所以,主要是看Dominator_tree
发现有一个线程名wecaht-offcial-pool 开头的线程名字把heap占满了,点开任意一个如下图:
发现是一个list对象占满了,然后找代码。。。
最后发现这是一个跑公众号,查询关注信息的job。近期随着关注的人增多,程序里面处理时候对象太大了导致full gc频繁发生。