资讯专栏INFORMATION COLUMN

线上系统内存溢出分析方法

IT那活儿 / 1262人阅读
线上系统内存溢出分析方法
点击上方蓝字关注我们


一、生产环境


操作系统:CentOS6.7

JDK版本:jdk1.6.0_45

中间件版本:apache-tomcat-6.0.37

JVM堆内存配置:-Xms8192m-Xmx8192m


二、事件起因


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


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

jstat -gcutil PID

经过查看,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 文件。

本次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分析页面的首页。


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

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

以下为输出的线程信息:

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


END



文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130003.html

相关文章

  • 一次线上问题排查所引发的思考

    摘要:直到有一天你会碰到线上奇奇怪怪的问题,如线程执行一个任务迟迟没有返回,应用假死。正好这次借助之前的一次生产问题来聊聊如何排查和解决问题。本地模拟上文介绍的是线程相关问题,现在来分析下内存的问题。尽可能的减少多线程竞争锁。 showImg(https://segmentfault.com/img/remote/1460000015568421?w=2048&h=1150); 前言 之前或...

    levy9527 评论0 收藏0
  • 强如 Disruptor 也发生内存溢出

    摘要:结合的日志发现就算是发生了老年代也已经回收不了,内存已经到顶。定位由于生产上的内存文件非常大,达到了几十。也是由于我们的内存设置太大有关。同时后台也开始打印内存溢出了,这样便复现出问题。结果发现类型的对象占用了将近的内存。 showImg(https://segmentfault.com/img/remote/1460000016186784?w=2048&h=1365); 前言 Ou...

    amuqiao 评论0 收藏0
  • [ 好文分享 ] 美团酒店Node全栈开发实践

    摘要:我所在的美团酒店事业部去年月份成立,新的业务新的开发团队,这一切使得我们的前后端分离推进的很彻底。日志监控平台日志监控平台是美团内部的一个日志收集系统,目前美团统一使用收集日志,具有接收格式日志的能力,而日志监控平台也是以格式日志来收集。 转自:美团技术团队 作者:美团技术团队 分享理由:很好的分享,可见,基于Node的前后端分离的架构是越显流行和重要,前端攻城狮们,No...

    wangdai 评论0 收藏0
  • 关于JVM内存溢出的原因分析及解决方案探讨

    摘要:内存溢出分配的内存空间超过系统内存。内存泄漏的原因分析由大块组成堆,栈,本地方法栈,程序计数器,方法区。内存溢出的原因分析内存溢出是由于没被引用的对象垃圾过多造成没有及时回收,造成的内存溢出。小结栈内存溢出程序所要求的栈深度过大导致。 showImg(https://segmentfault.com/img/bVbweuq?w=563&h=300); 前言:JVM中除了程序计数器,其他...

    xuexiangjys 评论0 收藏0
  • 100%移植阿里云移动测试技术,竟仅需1周?!——移动测试专有云(3)——内容详解

    摘要:换句话说就是,让测试更有针对性。得益于强大的测试技术,兼容性测试的检出率远远高于业界水平。同时,在性能测试方面,即提供了项性能指标曲线性能分析,更提供了强大的内存泄漏和内存溢出的检测和分析能力。 摘要: Android兼容性测试旨在帮助解决Android应用在不同真机机型上的各类兼容性问题,包括 Crash/ANR分析、6项性能分析、UI检测、3个版本的覆盖安装检测等。Android兼...

    付永刚 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<