文档章节

一次OOM的排查过程

耀子
 耀子
发布于 2016/07/12 10:29
字数 369
阅读 75
收藏 3

最近测试环境的Java应用经常挂掉,用jconsole查看堆内存使用情况,如下图:

堆内存使用量

在达到高峰的时候tomcat服务挂了,看图可以知道使用内存过大,于是开始追踪元凶。

  1. 加入启动参数 在catalina.sh加入-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/web/tomcat7/temp/oom.hprof 第一个参数是当发生OOM是生成heap dump文件,第二个参数是指定文件路径
  2. MAT工具分析 将生成的oom.hprof载入MAT进行分析(MAT工具下载地址:迅雷下载链接),如下图:

MAT分析图

工具怎么使用在此不讲了,参考官网wiki介绍。 点击图中Reports 下的 Leak Suspects,这里会列出了工具怀疑的内存泄露点,不过工具怀疑的也未必真的是存在的,但提供了一种参考。如下图:

怀疑的内存泄露点

图中怀疑内存泄漏点有四处,点击图中第一处的details查看详细情况,如下图:

内存泄露点1

从图中可以看到一个ArrayList有240097个对象引用没有释放掉,这才是导致OOM的原因,再查看报告中的Thread Stack,找到具体代码所在处,如下图:Thread Stack 经过排查,原来是程序代码一次性从数据库加载了全部的数据,没有分页导致的,修改完代码后一切正常了~~

© 著作权归作者所有

共有 人打赏支持
耀子
粉丝 6
博文 29
码字总数 4672
作品 0
东城
程序员
私信 提问
记一次oom内核优化记录:vm.lower_zone_protection

情景 最近gitlab服务会偶发性500,当前机器部署了gitlab、nfs等服务,经过排查发现是nfsd引发oom,导致系统运行不畅。处理过程如下: 事故现场 开发在使用gitlab的时候发现,偶发性的出现500...

阿dai
01/19
0
0
GC overhead limt exceed 导致的java进程假死

1.现象 线上后台任务的java进程处于假死状态 2.排查过程 1.查看假死的进程ID 2.将该进程的所有线程信息打印输出至指定文件 3.查看该日志文件前500行的信息 No deadlocks found,代表没有发现...

熊小飞呀
01/11
0
0
netty 堆外内存泄露排查思路

这篇文章对于排查使用了 netty 引发的堆外内存泄露问题,有一定的通用性,希望对你有所启发 背景 最近在做一个基于 websocket 的长连中间件,服务端使用实现了 socket.io 协议(基于websock...

匠心零度
2018/09/19
0
0
netty 堆外内存泄露排查盛宴

点击上方“闪电侠的博客”,关注公众号 纯技术干货文章第一时间送达! 这篇文章对于排查使用了 netty 引发的堆外内存泄露问题,有一定的通用性,希望对你有所启发 背景 最近在做一个基于 we...

闪电侠的博客
2018/09/04
0
0
在MySQL 5.7下排查内存泄露和OOM问题全过程

0、导读 我的个人网站后台使用的是MySQL 5.7版本,前段时间经常被oom-kill,借助5.7的新特性,经过一番排查,终于抓到这只鬼。 1、问题现象 我的网站前段时间经常时不时就抽风一下,提示数据...

iMySQL | 老叶茶馆
2017/03/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ZStack--工作流引擎

在IaaS软件中的任务通常有很长的执行路径,一个错误可能发生在任意一个给定的步骤。为了保持系统的完整性,一个IaaS软件必须提供一套机制用于回滚先前的操作步骤。通过一个工作流引擎,ZStac...

ZStack社区版
26分钟前
3
0
Eclipse 安装lombok

1.首先打开lombok官网:https://projectlombok.org/ 2.选择下载 3.使用java -jar 运行jar包(一般情况下双击即可) 4.安装 5.重启IDE...

hengbao5
30分钟前
4
0
混合式开发框架资料汇总

1.quickhybrid 2.kerkee 3.Hybrid

IT追寻者
37分钟前
2
0
PyCharm入门教程——基本编辑程序

PyCharm最新版本下载 JetBrains PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web...

电池盒
40分钟前
3
0
分布式、高并发、多线程

分布式 分布式是为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段。包括但不限于:分布式文件系统,分布式缓存,分布式数据库,分布式计算。 分布式的实现有两种形式: 水平扩展:...

细节探索者
44分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部