MAT(Memory Analyzer Tool)
1.装入dump文件
2.选择泄露检测报告
此时得到一个Overview和一个report的tab页面
3.在report页面,可以看到疑似内存有问题的对象
点击detail,意义进一步查看详情,一般这里就可以分析出问题疑似所在。如果不包含业务代码,可以把关键对象在网上搜一下,就能得出答案。比如上图的Http11OutputBuffer
4.也可以点击Overview里的Histogram,得到对象的内存占用柱状图
其中,Objects代表对象个数,Shallow Heap代表对象本身的内存大小,Retained Heap代表对象以及它所引用的对象和子对象的内存大小。
下图中很明显可以看到byte[]的保留大小高达3G,是OOM的罪魁祸首。但是byte[]不是业务对象,无法看出是哪里的问题。
5.选择byte[]右键->List objects -> with incoming references,列出byte[]对象被父对象、祖先对象引用的视图
with outgoinging references,表示列出对象内部引用的对象
6.在列出的对象树里,可以看出内存占用有问题的对象,占用了10M内存
7.鼠标移动到对象上,浮选框就是对象的内容。也可以把内容复制出来看看
HTTP/1.1 200 …Access-Control-Expose-Headers: token,Content-Range…Vary: Access-Control-Request-Headers…Vary: Origin…Vary: Access-Control-Request-Method…Access-Control-Allow-Origin: https://bms.cscec3b-iti.com…Access-Control-Allow-Credentials: true…Date: Fri, 01 Sep 2023 09:13:44 GMT…Content-Type: application/json;charset=UTF-8…Content-Length: 1425…on;charset=UTF-8…Transfer-Encoding: chunked…