生产环境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


相关文章
|
缓存 Java Android开发
【OOM异常排查经验】
【OOM异常排查经验】
213 0
|
2月前
|
存储 监控 Java
线上OOM排查
本文介绍了JDK工具的使用方法及其应用场景。首先详细说明了`jps`、`jstack`、`jstat`和`jmap`等工具的基本用法及参数含义,帮助开发者实时监控Java进程的状态,诊断线程问题及内存使用情况。接着介绍了`jvisualvm.exe`和`MemoryAnalyzer.exe`两款内存诊断工具,展示了如何通过这些工具进行内存分析。最后,文章提供了在线上OOM故障排查的具体步骤,并给出了解决方案示例,以便开发者更好地理解和解决实际问题。
线上OOM排查
|
消息中间件 存储 缓存
【10个OOM异常的场景以及对应的排查经验】
【10个OOM异常的场景以及对应的排查经验】
205 0
|
监控 Java
【线上问题排查】CPU100%和内存100%排查
【线上问题排查】CPU100%和内存100%排查
175 1
|
Java
OOM排查小案例
写作目的 排查过某OOM问题吗?额。。。没有
197 0
OOM排查小案例
|
存储 SQL Java
线上又 OOM 了 ,教你快速定位问题~
线上又 OOM 了 ,教你快速定位问题~
线上又 OOM 了 ,教你快速定位问题~
|
关系型数据库 Java 应用服务中间件
|
Arthas Prometheus 监控
排查GC问题常用的工具
最近杭州的花都陆陆续续开了。本来打算去太子湾看看郁金香,但到了地方才发现太子湾人满为患,无预约不能进。于是就在西湖边逛了逛,拍了点花花草草的照片。
798 0
|
存储 Java Android开发
【吐血🤮】一次生产环境NPE崩溃的排查记录(中)
直接说引起NPE的根本原因: rx订阅没有取消,回调时Fragment已经被回收,引用view调更新方法,自然NPE。
168 0
|
测试技术 Kotlin
【吐血🤮】一次生产环境NPE崩溃的排查记录(上)
直接说引起NPE的根本原因: rx订阅没有取消,回调时Fragment已经被回收,引用view调更新方法,自然NPE。
284 0