线上发生内存爆满问题处理
2021-04-26 本文已影响0人
Figo_OU
1. 先将内存堆信息以内存快照的形式保留下来。通过以下指令:
jmap -dump:format=b,file=20200304.hprof -F 18799
//其中20200304.hprof为文件名,18799为运行程序pid
获取pid可以通过jcmd指令获取。
注意:存储内存快照这个功能可能会引发stop the world,导致所有接口调用不了。接口返回503的失败显示。所以不要在线上正常的环境使用。
2. 然后修复线上问题。国际通用办法:重启服务。
3. 分析问题。
- 通过MAT分析内存快照。
- 通过jdk自带的jvisualvm.exe
4. 下面对MAT(Memory Analyzer Tool)做一下介绍
选择内存泄露分析打开对应的.hprof文件后,会有这个弹窗,选择内存泄露分析即可。
内存泄露分析然后在这边会有内存泄露的原因,点详情能大概知道是哪个类。对象的大小是多少。由于这个只是一个随便写的一个demo。所以只有系统加载类的内存信息。
5. 常见的内存爆满问题。
1. 并发量非常大,直接造成了内存的溢出。
2. 查询没有做分页,查找直接就返回了巨大的数据量。