本文主要是介绍GC日志查看及分析实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、GC日志格式
<start>: GC <before> K -> <after> k (<heap>K) , <total> ms
参数说明:
<start> GC的开始时间(秒),以JVM启动开始计算
<before> 回收前对象所使用的内存(KB)
<after> 回收后对象所使用的内存(KB)
<heap> 当前JVM的堆大小
<total> 执行回收的总时间
二、MAT工具
Eclipse Memory Analyzer Tool 原名SAP Memory Analyzer (免费离线)
特性:离线分析 需要得到JDK的内存镜像(heapdump)
heapdump获取方式:通过jdk安装时自带的jmap命令获取:$JAVA_HOME/bin/jmap -dump:format=b,file=$APP_HOME/dumpName.hprof [Pid]jdk1.8及之后:jmap -dump:live, format=b, file=heap.bin <Pid>
使用:
File - Open Heap Dump[Overview] - Leak Suspects (有问题的对象) - See stacktrace(看堆栈信息)
File - Open Heap Dump[Overview] - Dominator Tree(对象里面的详细内容)
下载地址:链接:https://pan.baidu.com/s/1Jbm1SHSu1qNpi_PuhJ5xpg 提取码:xzb6
三、生产环境内存问题分析实例
1.Weblogic的GC频繁报警分析:STATUS=Warning Eden=100 FGC=40 Old=99 YGC=0
2.处理过程:
① 使用工具箱收集HeapDump和ThreadDump
② 重启告警服务
③ 验证服务是否正常(恢复正常)
3.时间分析
① 用MAT分析HeapDump文件,发现线程A占用内存较大。在执行sockRead0读操作,进一步看线程信息,queryForList()执行查询sql
② 通过dominator-tree 视图发现共有100w个对象占用接近50%的内存空间
③ 通过分析代码,发现查询的数据库中数据量比上一个月新增接近50倍
4. 时间规避和优化
将该服务的堆内存扩大
这篇关于GC日志查看及分析实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!