文档章节

一次OOM的排查过程

耀子
 耀子
发布于 2016/07/12 10:29
字数 369
阅读 58
收藏 2
点赞 1
评论 0

最近测试环境的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
码字总数 4578
作品 0
东城
程序员
一次线上OOM故障排查经过

本文是一次线上OOM故障排查的经过,内容比较基础但是真实,主要是记录一下,没有OOM排查经验的同学也可以参考。 现象 我们之前有一个计算作业。最近经常出现不稳定,无法正常响应的情况。具体...

黄亿华 ⋅ 2014/03/05 ⋅ 30

在MySQL 5.7下排查内存泄露和OOM问题全过程

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

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

记一个程序oom的排查过程

一,背景 收到应用服务报警,然后登录上服务器查看原因,发现进程不再了。 二,问题分析 1,那么判断进程被干掉的原因如下: (1),机器重启了 通过uptime看机器并未重启 (2),程序有bug...

leejia1989 ⋅ 2017/07/31 ⋅ 0

Metaspace溢出排查过程

庞彤彤 2014年8月加入去哪儿,目前就职于大住宿事业部,主要负责交易运营相关内容。 一、问题 线上的 task 服务出现报警,没有服务者,发现有的机器突然下线了。 第一次出现问题时,发现服务...

Qunar技术沙龙 ⋅ 06/12 ⋅ 0

记一次OOM的排查过程

在最近公司产品的一次release中,我们遇到了一个Java OOM的问题,追查了几个小时才解决问题,而且事后发现造成问题的原因很简单,但追查的过程我认为值得记录一下。 1. 现象 我们的应用是跑在...

天天顺利 ⋅ 2015/10/14 ⋅ 0

fullgc过于频繁该怎么解决?(问题8)

fullgc过于频繁有可能会造成oom,有可能不会。 首先明确一下,这篇文章的重点是分析后面一种情况,即应用在频繁的fullgc,但并没有出现oom。 我们来想一下为什么会出现fullgc,触发原因有很多...

北风男 ⋅ 04/26 ⋅ 0

线上Java应用排查和诊断规范

@郑昀 整理 标准做法一:OOM触发HeadpDump 目的: OOM发生时,输出堆栈快照文件,供研发人员分析。 在JVM中,如果98%的时间是用于 GC 且可用的 Heap size 不足2%的时候,将抛出 OOM 异常。...

旁观者-郑昀 ⋅ 2013/09/26 ⋅ 0

Java内存溢出如何处理

背景介绍 新建Java对象时会在JVM的Heap中分配内存,对象不可达时其内存会被JVM GC回收, 但是当Heap中没有多余内存可供分配时,就会报OutOfMemory错误(以下简称OOM): 解决方法 解决方式很简...

Arthur126 ⋅ 2016/07/20 ⋅ 0

Linux系统 OOM Killer(Out Of Memory killer)问题排查

Kernel真的内存耗尽了./proc/meminfo中的SwapFree和MemFree很低.都小于1%,那么负载过大就是原因. 2) 如果LowFree很低而HighFree高很多,那么就是32位体系结构的原因,如果在64位内核或平台上就...

jiangwu ⋅ 2016/05/20 ⋅ 0

又一次线上OOM排查经过

最近线上一个服务又出现了频繁Full GC的情况,导致提供的业务经常超时。问题出现非常不稳定,经过两周的时候,终于又捕捉到了一次Full GC,于是联系运维做Heap Dump之后,经过一系列分析,终...

黄亿华 ⋅ 2014/05/16 ⋅ 15

没有更多内容

加载失败,请刷新页面

加载更多

下一页

20.zip压缩 tar打包 打包并压缩

6月25日任务 6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩 6.5 zip压缩工具: zip支持压缩目录 zip压缩完之后原来的文件不删除 不同的文件内容其实压缩的效果不一样 文件内有很多重复的用xz压...

王鑫linux ⋅ 6分钟前 ⋅ 0

double类型数据保留四位小数的另一种思路

来源:透析公式处理,有时候数据有很长的小数位,有的时候由在四位以内,如果用一般的处理方法,那么不足四位的小树会补充0到第四位,这样子有点画蛇添足的感觉,不太好看。所以要根据小数的...

young_chen ⋅ 13分钟前 ⋅ 0

Python 优化 回溯下降算法

使用sympy构造表达式,实现回溯下降算法 画出函数图像,先使用暴力搜索,找到最小值约为2.5左右 然后选定初始点,开始进行回溯搜索,下降方向为负梯度方向 下降的误差与步数大致呈现下面的状...

阿豪boy ⋅ 18分钟前 ⋅ 0

Django配置163邮箱出现 authentication failed(535)错误解决方法

最近用Django写某网站,当配置163邮箱设置完成后,出现535错误即:smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') Django初始配置邮箱设置 EMAIL_HOST = "smtp.1...

陈墨轩_CJX ⋅ 19分钟前 ⋅ 0

用接口模拟可伸缩枚举(34)

1、枚举的可伸缩性最后证明都不是什么好点子 扩展类型的元素是基本类型实例,基本类型的实例却不是扩展类型的元素,很混乱 目前还没有很好的方法来枚举基本类型的所有元素,及其扩展 可伸缩性...

职业搬砖20年 ⋅ 23分钟前 ⋅ 0

Ubuntu18.04 IDEA快捷键无法使用

IDEA默认的回退到上一视图的快捷键是Ctrl + Alt + Left,在ubuntu中这个快捷键被占用了,在16.04中可以在界面中取消这个快捷键,但是18.04就看不到了,可以使用以下命令解决 gsettings set ...

Iceberg_XTY ⋅ 27分钟前 ⋅ 0

如何解决s权限位引发postfix及crontab异常

一、问题现象 业务反馈某台应用服务器,普通用户使用mutt程序发送邮件时,提示“postdrop warning: mail_queue_enter: create file maildrop/713410.6065: Permission denied”,而且普通用法...

问题终结者 ⋅ 39分钟前 ⋅ 0

Unable to load database on disk

由于磁盘空间满了以后,导致zookeeper异常退出,清理磁盘空间后,zk启动报错,信息如下: 2018-06-25 17:18:46,904 INFO org.apache.zookeeper.server.quorum.QuorumPeerConfig: Reading co...

刀锋 ⋅ 59分钟前 ⋅ 0

css3 box-sizing:border-box 实现div一行多列

<!DOCTYPE html><html><head><style> div.container{ background:green; padding:10px 10px;}div.box{box-sizing:border-box;-moz-box-sizing:border-box; /* Fir......

qimh ⋅ 今天 ⋅ 0

Homebrew简介和基本使用

一、Homebrew是什么 Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径...

说回答 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部