当前位置: 首页 > news >正文

使用MAT进行内存分析,并找到OOM问题

前言

在处理一次现场问题时,发现服务还在运行,但是出现假死情况,后通过分析GC日志以及使用MAT分析确定问题是内存溢出OutOfMemery(OOM);这里只记录MAT分析学习过程,最近工作忙,补记录。
GC日志分析

首先,如果明确了是哪个服务出现了问题,就可以使用
ps -aux | grep 服务名查看PID,如果是jar启动,在jvm中,则使用:jps 进程号
如果不能明确,可使用top命令查看cup占用率,来分析是哪个服务内存出了问题;
然后在出现问题时,对堆及内存对象进行快照,可以导出快照dump对它进行分析;
jmap -dump:live,format=b,file=wanfile.dump PID,会导dump问题到当前目录下,你可以指定目录导出。

在这里插入图片描述

注意

1、不同的 JAVA虚机的线程 DUMP的创建方法和文件格式是不一样的,不同的 JVM版本, dump信息也有差别
2、你要确保是快照是能照到出现的问题,不能重启或者问题没发生,就进行快照,这样是找不到问题所在的。

jstack,jmap,jhat使用介绍

用于JVM当前时刻的线程快照,又称threaddump文件,它是JVM当前每一条线程正在执行的堆栈信息的集合。生成线程快照的主要目的是为了定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部时长过长导致线程停顿的原因。

#1.jstack 
jstack <PID>
jstack -F <PID> # 有时候线程挂起的时候要加上-F参数才能把信息dump处理
jstack -F -l pid (查出某个进程中运行的所有线程)
生成进程下所有线程的栈日志:jstack <PID> > test.txt
#2.jmap
#提取进程内存信息,用于分析OOM导致原因如下,其中(format=b是通过二进制的意思)
jmap -dump:format=b,file=HeapDump.bin <pid>
#输出堆信息
jmap -heap <PID>
#jhat简单分析内存中对象情况
#读取dump文件,生成报告,并启动WEB服务器,默认端口为7000
jhat -J-mx768m -stack false HeapDump.bin 

回归正题,现在我们已经导出了dump,那么我们使用MAT来对该内存进行分析,

我个人喜好用MAT,你也可以使用JDK自带的jvisualvm,或者有钱的话使用商业JProfil

打开mat,并导入dump
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • shallow heap 表示对象本身占用内存的大小,也就是对象头加成员变量(不是成员变量的值)的总和。

  • retained heap
    如果一个对象被释放掉,那会因为该对象的释放而减少引用进而被释放的所有的对象(包括被递归释放的)所占用的heap大小,即对象被垃圾回收器回收后能被GC从内存中移除的所有对象之和。相对于shallow
    heap,Retained heap可以更精确的反映一个对象实际占用的大小(若该对象释放,retained heap都可以被释放)。

在这里插入图片描述
在这里插入图片描述
定位问题,该定时任务,定时执行时间过快,涉及到merge into循环操作,对象还创建完,就开始了下一次执行,GC都没回收完,导致内存溢出

相关文章:

使用MAT进行内存分析,并找到OOM问题

前言 在处理一次现场问题时&#xff0c;发现服务还在运行&#xff0c;但是出现假死情况&#xff0c;后通过分析GC日志以及使用MAT分析确定问题是内存溢出OutOfMemery(OOM)&#xff1b;这里只记录MAT分析学习过程,最近工作忙&#xff0c;补记录。 GC日志分析 首先&#xff0c;如…...

初识Python

目录初识Python1.Python简介Python的优缺点Python的应用领域2.安装Python解释器Windows环境Linux环境macOS环境3.运行Python程序确认Python的版本编写Python源代码运行程序代码中的注释4.Python开发工具IDLE - 自带的集成开发工具IPython - 更好的交互式编程工具Sublime Text -…...

tmux终端复用软件

一、安装[rootpool-100-1-1-159 test]# yum install tmux [rootpool-100-1-1-159 test]# yum search tmux Repository extras is listed more than once in the configuration Last metadata expiration check: 0:33:52 ago on Fri 03 Mar 2023 09:10:34 AM CST.Name Exactly M…...

IO详解(文件,流对象,一些练习)

目录 文件 文件概念 文件的路径 路径有俩种表示风格 文件类型 如何区分文本文件还是二进制文件? java对文件的操作 File类中的一些方法 流对象 流对象的简单概念 java标准库的流对象 1.字节流,(操作二进制数据的) 2.字符流 (操作文本数据的) 流对象最核心的四个…...

SpringCloud全家桶— — 【1】eureka、ribbon、nacos、feign、gateway

SpringCloud全家桶— — 组件搭建 1 Eureka 1.1 Eureka-server 创建eureka-server的SpringBoot项目 ①导入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId…...

【线程安全篇】

线程安全之原子性问题 x &#xff0c;在字节码文件中对应多个指令&#xff0c;多个线程在运行多个指令时&#xff0c;就存在原子性、可见性问题 赋值 多线程场景下&#xff0c;一个指令如果包含多个字节码指令&#xff0c;那么就不再是原子操作。因为赋值的同时&#xff0c…...

错误:EfficientDet网络出现“No boxes to NMS“并且mAP:0.0的解决方案

近日&#xff0c;在使用谷歌新推出来的一个网络EfficientDet进行目标检测训练自己的数据集的时候&#xff0c;出现了如下错误&#xff1a; 其中项目开源地址是&#xff1a;https://github.com/toandaominh1997/EfficientDet.Pytorch 上面截图中的1和2代表我的类别名称。读者可…...

python的opencv操作记录13——区域生长及分水岭算法

文章目录图像区域基本算法——形态学运算腐蚀与膨胀开运算与闭运算opencv中的形态学运算距离计算——distanceTransform函数连通域连通的定义计算连通域——connectedComponents连通域实验基于区域的分割区域生长算法自定义一个最简单区域生长算法实现区域分割一般区域分割open…...

一文看懂网上下单的手机流量卡为什么归属都是随机的!

最近很多网上下单的小伙伴们心中似乎都有一个疑问。那就是网上很多手机卡、流量卡都不能自选号码和归属地&#xff0c;就算能自选号码&#xff0c;归属地也是随机的而且很多都不会跟你说具体的城市&#xff0c;这是为什么呢&#xff1f;莫非其中有什么不可告人的秘密吗?小伙伴…...

python Pytest生成alluer测试报告的完整教程

1.下载allure包到本地&#xff0c;解压 网上很多资料&#xff0c;这边不提供了 2.配置环境变量 将上面解压后bin文件的路径复制&#xff0c;添加到环境变量Path下 3.验证环境变量配置是否功 在cmd中输入allure&#xff0c;回车 。查看allure是否成功&#xff1a; 4.pyc…...

4-spring篇

ApplicationContext refresh的流程 12个步骤 prepareRefresh 这一步创建和准备了Environment对象&#xff0c;并赋值给了ApplicationContext的成员变量 要理解Environment对象的作用 obtainFreshBeanFactory ApplicationContext 里面有一个成员变量&#xff0c;Beanfactory b…...

提升 Web 应用程序的性能:如何使用 JavaScript 编写缓存服务

缓存是一种重要的优化技术&#xff0c;用于加速数据访问和降低服务器负载。缓存存储经常访问的数据&#xff0c;以便在需要时可以快速检索。在本文中&#xff0c;我们将探索如何使用简单的数据结构在 JavaScript 中编写缓存服务。 编码缓存服务的第一步是定义将用于访问缓存的…...

供应商绩效管理指南:挑战、考核指标与管理工具

管理和优化供应商绩效既关键又具有挑战性。要知道价格并不是一切&#xff0c;如果你的供应商在商定的价格范围内向你开具发票&#xff0c;但服务达不到标准或货物不合格&#xff0c;你也无法达到节约成本的目标。 供应商绩效管理可以深入了解供应商可能带来的风险&#xff0c…...

干货文稿|详解深度半监督学习

分享嘉宾 | 范越文稿整理 | William嘉宾介绍Introduction to Semi-Supervised Learning传统机器学习中的主流学习方法分为监督学习&#xff0c;无监督学习和半监督学习。这里存在一个是问题是为什么需要做半监督学习&#xff1f;首先是希望减少标注成本&#xff0c;因为目前可以…...

信箱|邮箱系统

技术&#xff1a;Java、JSP等摘要&#xff1a;在经济全球化和信息技术飞速发展的今天&#xff0c;通过邮件收发进行信息传递已经成为主流。目前&#xff0c;基于B/S&#xff08;Browser/Server&#xff09;模式的MIS&#xff08;Management information system&#xff09;日益…...

JS数组拓展

1、Array.from Array.from 方法用于将两类对象转为真正的数组&#xff1a; 类似数组的对象,所谓类似数组的对象&#xff0c;本质特征只有一点&#xff0c;即必须有length属性。 因此&#xff0c;任何有length属性的对象&#xff0c;都可以通过Array.from方法转为数组 和 可遍历…...

一道很考验数据结构与算法的功底的笔试题:用JAVA设计一个缓存结构

我在上周的笔试中遇到了这样一道题目&#xff0c;觉得有难度而且很考验数据结构与算法的功底&#xff0c;因此Mark一下。 需求说明 设计并实现一个缓存数据结构: 该数据结构具有以下功能&#xff1a; get(key) 如果指定的key存在于缓存中&#xff0c;则返回与该键关联的值&am…...

(10)C#传智:命名空间、String/StringBuilder、指针、继承New(第10天)

内容开始多了&#xff0c;慢品慢尝才有滋味。 一、命名空间namespace 用于解决类重名问题&#xff0c;可以看作类的文件夹. 若代码与被使用的类&#xff0c;与当前的namespace相同&#xff0c;则不需要using. 若namespace不同时&#xff0c;调用的方法&#xff1a…...

基于Jetson Tx2 Nx的Qt、树莓派等ARM64架构的Ptorch及torchvision的安装

前提 已经安装好了python、pip及最基本的依赖库 若未安装好点击python及pip安装请参考这篇博文 https://blog.csdn.net/m0_51683386/article/details/129320492?spm1001.2014.3001.5502 特别提醒 一定要先根据自己板子情况&#xff0c;找好python、torch、torchvision的安…...

MySQL存储引擎详解及对比和选择

什么是存储引擎&#xff1f; MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术&#xff0c;你能够获得额外的速度或者功能&#xff0c;从而改善…...

Gemini3.1Pro写作教练全攻略

2026 年&#xff0c;写作工具的使用方式已经发生了明显变化。过去很多人把大模型当成“代写工具”&#xff0c;但真正高效、长期可持续的用法&#xff0c;其实是把它当成个人写作教练&#xff1a;帮你拆选题、理结构、改表达、做复盘&#xff0c;而不是直接替你完成所有内容。最…...

AI大模型选型指南:构建开源比较平台的技术实践与架构解析

1. 项目概述&#xff1a;为什么我们需要一个AI模型“选型指南”&#xff1f;最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目&#xff0c;叫ai-llm-comparison。光看名字&#xff0c;你大概就能猜到它是干嘛的——一个关于人工智能大语言模型的比较项目。说实话&#…...

鸿蒙一气总论(八)

第八卷 古今气运历史兴衰天道规律卷首引天地有气运&#xff0c;一气有盈亏&#xff1b; 万象有消长&#xff0c;人世有兴衰。天运为纲&#xff0c;地运为基&#xff0c;人运为果。 朝代更迭、世道治乱、民心淳漓、文明起落&#xff0c; 从来不是偶然人事&#xff0c;不是强弱输…...

CANN/asc-devkit Trunc截断函数API

Trunc 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://gitcode.com/cann…...

CANN/ops-nn三维平均池化反向传播算子

AvgPool3DGrad 【免费下载链接】ops-nn 本项目是CANN提供的神经网络类计算算子库&#xff0c;实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-nn 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产…...

有一种同事,领导再信任也要小心提防

◆你好。 职场上有这么一类人&#xff0c;他们精于伪装&#xff0c;表面上能力出众、忠心耿耿&#xff0c;实则暗地里拉帮结派、打压异己&#xff0c;甚至一步步架空领导。 这种人最可怕的地方在于&#xff0c;他们往往深得领导信任&#xff0c;成为团队里的"红人"。…...

突发模式光功率监控技术解析与实现

1. 突发模式光功率监控的技术挑战与解决方案在光通信系统中&#xff0c;发射功率监控是确保模块稳定运行的关键技术。传统连续模式下的监控方案通过简单滤波即可获取平均值&#xff0c;但在突发模式&#xff08;Burst Mode&#xff09;应用中&#xff0c;由于信号激活时间短且动…...

Weaviate官方示例库全解析:从向量数据库入门到AI应用实战

1. 项目概述&#xff1a;一个向量数据库的“游乐场”如果你最近在折腾大语言模型应用&#xff0c;或者想给自己的数据加上一个智能的“记忆大脑”&#xff0c;那你大概率已经听说过向量数据库了。在众多选择中&#xff0c;Weaviate 以其开源、易用和强大的功能&#xff0c;成为…...

AI编程代理全景导航:从技术选型到实战评估指南

1. 项目概述&#xff1a;一个探索智能编码代理的“藏宝图”最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目&#xff0c;叫tndata/CodingAgentExplorer。光看名字&#xff0c;你可能会觉得这又是一个关于AI代码生成或者大语言模型&#xff08;LLM&#xff09;的常规仓…...

手把手教你用GD32F407和LWIP实现一个简易网络调试助手(UDP/TCP双模)

基于GD32F407与LWIP的智能网络调试工具开发实战 在嵌入式设备网络化需求日益增长的今天&#xff0c;如何快速构建一个稳定可靠的网络通信调试工具成为许多工程师面临的挑战。GD32F407作为国产MCU的优秀代表&#xff0c;搭配轻量级TCP/IP协议栈LWIP&#xff0c;能够为各类工业控…...