系统运行时,遇到服务器cpu占满的情况,查看gc日志,发现系统在频繁做 Full gc,tomcat 占用大量内存,回收不了,通过如下方式进行排查:
0. 首先我们要在Tomcat 正在进行 full gc 时能收到异常通知,然后用 ps 命令找到当前 tomcat 所在的进程号,如 ps -ef | grep leon-tomcat ,后面假设进程号为 XXX
1. jmap -dump:live,format=b,file=dump.hprof XXXX 此命令可以把当前 tomcat 所占用的内存全部 dump 到二进制文件中,以备后面的分析使用。
2. 下载我们即将使用的关键软件,直接官网下载,下面是写此文时的最新版本,读者可以使用最新版。
3. `wget http://ftp.jaist.ac.jp/pub/eclipse/mat/1.15.0/rcp/MemoryAnalyzer-1.15.0.20231206-linux.gtk.x86_64.zip`
3.1下载完之后需要解压,linux 可以使用 unzip 命令,很方便。
3.2,一般jmap 出来的文件非常大,可以修改配置参数,按需要修改使用内存大小
-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.100.v20110505
-vmargs
-Xms16g
-Xmx16g
-vm # 指定 jdk ,最新版的工具,需要 jdk 17 及以上,这里使用的是jdk22版本
C:\Program Files\Java\jdk-22.0.2\bin\java.exe
4. `./ParseHeapDump.sh ../dump.hprof org.eclipse.mat.api:suspects`
1. 还可以使用另外两个 参数
2. org.eclipse.mat.api:overview
3. org.eclipse.mat.api:top_components
5. 最后,命令执行的结果里面,会有一个压缩文件,down 下来,就可以分析问题原因了
如果以上linux 环境不能分析,或者对于linux 环境不熟悉,可以吧 dump.hprof 下载到本地,使用windows 版本的mat 工具进行分析
网友评论