专项提升-分析dump堆文件 服务器内存占用排查
一、堆文件
1、先把服务器上运行的JAVA程序的文件dump下来
其实直接在Linux上使用Linux命令分析也可以,但一般在企业中作为一名开发是没有权限去在服务器上操作的,基本都是运维在负责,但可以让运维协助完成,需要注意两点,一是注意时间节点,挑一个正常时间(上班-下班)去做,这样内存占用情况也常规合理,分析也会更有意义
如果内存经常打满,那就找个内存占用最高的时候去dump
wget -c 'https://demo123.obs.cn-east-3.myhuaweicloud.com:443/ops/temp_upload/spm.zip?AWSAccessKeyId=QXTISFCH9UM05IOXHB3Y&Expires=1749030220&Signature=WHBqNaNN6ERb2%2Fp86d9xK%2BruFQE%3D' -O spm.zip
上述命令后你会得到一份压缩文件,解压缩后得到java.dump文件
2、内存分析工具-jprofile
https://download.csdn.net/download/m0_54925305/90982370
接下来分析dump内存的工具有不少,比如JProfiler,jvisualvm。推荐使用JProfiler
3、小技巧
一个小技巧,如果安装的时候勾选了关联文件后缀名选项,那直接将后缀名改为 .hprof 双击就可以打开了
二、内存分析
重点关注"Current Object Set" 和"Thread Dump",即:
1.Current Object Set: 确定相关对象,找到对应的线程.
2.在Thread Dump中查找对应的线程,确定方法调用栈,找到具体的业务操作.
因内存溢出,更多的关注占内存大小,可以点击"size"排序,对内存占用最多的对象进行分析
附:
LaunchedURLClassLoader导致的内存溢出处理办法_launchedurlclassloader内存溢出-CSDN博客