1.工具准备
在这里使用 jdk/bin 目录下的 jvisualvm.exe,是自带工具。
2.工具使用
将下载到本地的dump 文件导入工具中,会展示各个类的实例数占比,大小占比。
3.问题排查
- 前期准备
在分析dump文件之前,我们可以先观察应用中接口的流量情况,或者根据一线反馈,去初步估计问题可能出现的位置,这样在后面的问题排查中更有目的性。
- 分析定位问题
2.1 使用工具去观察dump文件中,各种类和实例的个数。一般情况下,排在最面前,占用空间最多的,都是基础类型。我们自己的各种类和对象中,也是包含的各种基础类型。
2.2 观察是否有本项目使用的类和对象,在dump文件中实例数或者内存占比额外大,有这种类或实例,和1中怀疑出现问题的地方互相印证,确定问题原因。
2.3 如果不在之前怀疑出现问题的地方,去找使用这些实例多的方法以及这些方法的上下文,确定问题原因。
- 问题确认
在线下环境重新复现gc问题
4. 问题修复
3.1 考虑问题是否可以在线修复,通过改数据或者改配置的方式。
3.2 如果无法在线修复,考虑问题的紧急性,是hotfix还是在后续正常迭代修复。
5. 问题验证
修复以后重新上线,重新复现此场景,观察问题是否还会出现,是否已经被修复。
6. 复盘
根据问题出现场景和出现原因,以及问题产生的影响范围,记录开发过程中出现此问题的环节,在后续开发过程中避免此类问题再发生。