生产环境OOM问题的排查记录

简介: 生产环境OOM问题的排查记录

一、jstack排查问题

生产环境最近老是发生oom

top命令查看占用内存最高的java进程为927

top -H -p 927 查看927进程对应的线程

sudo jstack -F 927 > xxx.log  想要打印所有的线程栈信息,可是确报了如下异常

查看jdk版本

另一个环境1.8.0_91 jstack就可以猜测是jdk版本问题

二、jmap结合MemoryAnalyzer排查问题 PlanaA

现在只能用jmap来排查问题了jmap   -dump:live,format=b,file=927.hprof 927

把java进程都dump成927.hprof文件

下载下来文件发现有927.hprof有4G多MemoryAnalyzer工具打开后根本无法解析,只能采用planB

三、jmap结合MemoryAnalyzer排查问题 PlanaB

下载LINUX的MAT地址:http://www.eclipse.org/mat/downloads.php

MemoryAnalyzer.ini 配置文件可以修改最大的内存,默认1G基本够用了。

在linux执行分析命令

./ParseHeapDump.sh 927.hprof org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components。

解压927_Top_Components.zip进入index.html

可以看到RollbarService类里有两个对象占用了大量的空间

解压927_System_Overview.zip进入index.html  

Class Histogram也可以找到蛛丝马迹大概是rollar包引起的(shallow heap和 retained heap的单位都是byte)

四、名词解释

所有包含Heap Profling功能的工具(MAT, Yourkit, JProfiler, TPTP等)都会使用到两个名词,一个是Shallow Size,另一个是 Retained Size.

Shallow Size

对象自身占用的内存大小,不包括它引用的对象。

 


Retained Size

Retained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和

五、正常排查流程总结

内存溢出分析
JAVA dump查看线程运行情况:
=====查看栈信息=======================
1.查询java程序pid 
  netstat -ntpl | grep 8080
2.使用jstack [-l] 进程pid > xxx.log将进程里所有线程信息输入到指定文件中
  1)如果程序正常运行:使用jstack [-l] 进程pid > xxx.log将所有线程信息输入到指定文件中 
  2)如果程序无响应:使用 jstack -F [-m] [-l] 进程pid >xxx.log强制打印栈信息 
=====查看堆信息=======================
3.使用top命令找出占用cpu高(或者执行时间很长)的进程pid 
4.使用top -H -p 线程pid 找出占用cpu高(或执行时间长)的线程pid 
5.将占用cpu高的线程pid转换成16进制(window自带计算器) 
6.dump该进程的内存
  jmap -dump:format=b,file=文件名 [进程pid]   将转换后的pid在开始输出的dump文件(xxx.log)中搜索对应线程信息 
7.eclipse Memory Analyzer 对dump文件分析

参考文章:https://www.cnblogs.com/But-you/p/10431543.html


相关文章
|
6月前
|
缓存 Java Android开发
【OOM异常排查经验】
【OOM异常排查经验】
118 0
|
6月前
|
消息中间件 存储 缓存
【10个OOM异常的场景以及对应的排查经验】
【10个OOM异常的场景以及对应的排查经验】
|
8月前
|
监控 Java
【线上问题排查】CPU100%和内存100%排查
【线上问题排查】CPU100%和内存100%排查
119 1
|
Java
OOM排查小案例
写作目的 排查过某OOM问题吗?额。。。没有
154 0
OOM排查小案例
|
测试技术 Kotlin
【吐血🤮】一次生产环境NPE崩溃的排查记录(上)
直接说引起NPE的根本原因: rx订阅没有取消,回调时Fragment已经被回收,引用view调更新方法,自然NPE。
225 0
【吐血🤮】一次生产环境NPE崩溃的排查记录(下)
直接说引起NPE的根本原因: rx订阅没有取消,回调时Fragment已经被回收,引用view调更新方法,自然NPE。
122 0
|
存储 Java Android开发
【吐血🤮】一次生产环境NPE崩溃的排查记录(中)
直接说引起NPE的根本原因: rx订阅没有取消,回调时Fragment已经被回收,引用view调更新方法,自然NPE。
124 0
|
SQL 存储 缓存
使用实践:OOM排查指南
本文将会介绍如何针对Hologres中出现的OOM问题进行排查并处理。
2328 0
|
JavaScript 搜索推荐 前端开发
一次解决页面特效问题的排查记录
大家在做项目的时候,肯定会和我一样,碰到各种各样的问题,然后熟练的打开搜索引擎,输入些关键字,开始解决问题。最近在做一个效果,中间就碰到了各种问题,接下来我把解决这个问题的过程发出来分享下,也算是我的一个小心得。 要做的效果其实很简单,就是在做支付的时候,出现一个弹出层,然后跳到一张新页面,类似于下面两张图片的效果:
一次解决页面特效问题的排查记录
记一次并发引起的问题及排查过程
聚合支付系统(第四方支付),协议支付模块一直有个小问题。 商户调用协议支付接口,该模块会调用下层第三方支付渠道的协议支付服务,如果第三方支付渠道没有同步返回支付结果,则协议支付模块会通过定时任务向第三方支付渠道批量第查询支付结果(每查一笔订单就调一次第三方支付渠道,“批量”相当于并发调用第三方支付渠道)
记一次并发引起的问题及排查过程