怎样分析服务器的内存溢出文件,线上系统内存溢出分析方法

0e2bcb1bee6ce0b32fbca3fd623d0919.png点击上方蓝字关注我们0e2bcb1bee6ce0b32fbca3fd623d0919.png

一、生产环境

操作系统:CentOS6.7

JDK版本:jdk1.6.0_45

中间件版本:apache-tomcat-6.0.37

JVM堆内存配置:-Xms8192m-Xmx8192m

二、事件起因

系统前台应用节点告警“URL连接超时”

2.1 使用jstat命令—JVM统计监测工具对堆内存进行分析

jstat -gcutil PID

0ca79aef288efc8471d1273bf67b2d02.png

经过查看,JVM堆内存的年轻代和老年代使用率达到100%

2.2 生成HeapDump文件

Heap Dump是Java进程所使用的内存情况在某一时间的一次快照。以文件的形式持久化到磁盘中。

Heap Dump 获取方式

1、使用 jmap命令生成 dump文件

jmap-dump:live,format=b,file=./log/`hostname`heap.hprof

2、使用 jcmd命令生成 dump文件

jcmd GC.heap_dump app/share/dump/3.39/`date +%Y%m%d%H%M`heap.hprof

3、使用 JVM参数获取 dump文件

-XX:+HeapDumpOnOutOfMemoryError

当OutOfMemoryError发生时自动生成Heap Dump 文件。

45e5a8642b64fdffc28ed6175edf099b.png

本次dump文件为jmap命令手动生成。

2.3 上传至内网分析服务器

ftp -n

open 192.168.xxx.xxx

user username passwd

passive

binary

hash

lcd app/scripts/log #headdump路径

prompt

cd dump              #远程服务器路径

mput heap.hprof      #headdump文件

close

bye

三、利用MAT检查内存泄漏

3.1、打开MemoryAnalyzer软件,File --> Heap Dump --> next,选择对应的进程,等待MAT加载完成,点击Finish就可以进入MAT分析页面的首页。

c81e1a2eaf035bde85fa69d6f842766b.png

3.2、使用MAT的DominatorTree视图,定位到内存溢出源

通过DominatorTree视图可以很容易的找出占用内存最多的几个对象(根据RetainedHeap或Percentage排序)

f53d56d50aa88ef02f528b7d57fa0bac.png

efcb61ec394295d17da9523f00860cd4.png

以下为输出的线程信息:

82b689bbc3d1ecdf4b34d1c5959c5d04.png

通过分析我们发现cn.chinatowercom.crm.pub.common.StaticParam.queryStaticParam这个线程为可疑线程。交由开发排查发现该线程为导出时生成,导出数据量较大,从缓存获取的省市区信息,每次只能获取一条,循环翻译导致内存溢出。

1aad983558c056271e408f5b001f3d0d.pngEND

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值