JVM 故障调优
JVM --- OOM 线上环境处理
定位
没有日志可以定位
接受所有系统, jvm启动参数
转为一个文件,JVM 内存快照
1 -XX:+HeapDumpOnOutOfMemoryError -xx:HeapDumpPath = /temp/202009.hpro
GcRoot是垃圾回收器算法中判断一个对象是否可以回收的一种算法
就是对象到达GcRoot的路径是否还有可达,即是否有可引用链,如果有,这表明对象还存在着引用,
如果没有,则表明该对象没有引用,在下一次垃圾回收时就会被回收
GcRoot的种类
1.虚拟机栈:栈帧中的本地变量表引用的对象
2.native方法引用的对象
3.方法区中的静态变量和常量引用的对象
基于JVM理解,利用MAT 工具
1、内存是否不通用 --> 压力测试,了解 jvm 原理
结合业务场景 ----> 每个请求返回多少数据
2、可能是业务流程有问题(代码有问题)
可能 ---》 对象太多 ---》 GC 手段 ---》 垃圾回收 ---》 释放
OOM ---》 GC 无法释放更多内存
1、可以对象定位
一个类、多个地方使用 --》 登录/查询用户列表/导出用户数据
2、可疑代码段定位
没有GC 有地方再用 ---》什么地方使用
对象在哪里来 ---》 代码中的动态创建
Java ----执行的最小单位 ----》 线程
求解 哪段代码导致 OOM
2.1 、找到可疑线程
main ---主线程
Thread-0
2.2、线程当时运行的情况
线程执行stack信息
3、分析代码逻辑,排除问题
OOM
1、启动时候出现
2、运行过程中,内存泄漏
修改前
修改后
在同一个线程中,创建对象没有被回收