首页 > 系统相关 >记一次线上OOM内存溢出的排查历程

记一次线上OOM内存溢出的排查历程

时间:2023-03-21 18:01:15浏览次数:38  
标签:分析 文件 java OOM 排查 内存 日志 泄露


# 环境准备

1. 内存泄露文件
注:在运行java项目的时候,添加参数,当内存溢出的时候可以生成hprof二进制文件,这个可以百度下
java_pid200378.hprof

2. 内存泄露分析工具
eclipse memory analyzer


# 释义

1. 内存泄露
内存泄露为程序在申请内存后,无法释放已申请的内存空间
换句话说
不再会被使用的对象或者变量占用的内存不能被回收,就是内存泄露


# 开始喽
如下图所示,是我的两个准备文件

记一次线上OOM内存溢出的排查历程_hprof

# 文件打开页面,开始我的分析之路
点击 Leak Suspects

记一次线上OOM内存溢出的排查历程_analyzer_02

# 两个问题导致内存泄露,一个一个去分析

记一次线上OOM内存溢出的排查历程_内存溢出_03

# 寻找占用内存最大的两个对象

记一次线上OOM内存溢出的排查历程_analyzer_04

# 这里可以一级一级的展开,查看具体的对象信息

记一次线上OOM内存溢出的排查历程_OutOfMemory_05

# 重要的是从日志中分析出,内存泄露和代码中的关系,如下图所示
这张图是通过第二张图里面的①或者②点进来,拖到最下面就是下图看到的日志

记一次线上OOM内存溢出的排查历程_hprof_06

# 网上搜一搜
原文连接:https://www.weixiuzhan.cn/news/show-28946.html

记一次线上OOM内存溢出的排查历程_内存泄露_07

# 验证问题

记一次线上OOM内存溢出的排查历程_内存泄露_08

记一次线上OOM内存溢出的排查历程_analyzer_09

# 小结
如果看上面那篇文章的话,会告诉你在启动类调整对应参数设置,我这里因为本身就小,升级一下就够使了,所以采用升级的方案

不过,上面的分析思路还是需要在实际的环境中跑一跑才可以验证me的猜想

大家有问题,留言交流呦

又一次的内存泄露分析(2023年1月31日)

记一次线上OOM内存溢出的排查历程_hprof_10

记一次线上OOM内存溢出的排查历程_OutOfMemory_11

 

记一次线上OOM内存溢出的排查历程_analyzer_12

 

记一次线上OOM内存溢出的排查历程_analyzer_13

 

标签:分析,文件,java,OOM,排查,内存,日志,泄露
From: https://blog.51cto.com/u_16021118/6140758

相关文章

  • ALLEGRO中放置器件ROOM的使用
    1,打开原理图   这里改原理图的ROOM,第一张原理图填写1,第二章原理图填2,以此类推  这里原理图改好后,重新导入第一方网表,然后切换到PCB文件      ......
  • 【C/C++动态内存 or 柔性数组】——对动态内存分配以及柔性数组的概念进行详细解读(张
    前言(栈区、堆区、静态区)请耐心看完,看完后就会对内存中的空间划分有了更深刻的认识!我们知道,任何一个变量的创建都会向内存申请空间用来存放,而在内存中的空间又划分为几个区域......
  • Python查看对象所占内存大小
    以下内容摘自ChatGPT在Python中,可以使用sys模块中的getsizeof()函数来查看一个数据结构所占用的内存大小。该函数返回对象占用的字节数,但是需要注意以下几点:1.getsizeo......
  • Linux 查看进程占用cpu/内存/io信息
    Linux查看进程占用cpu/内存/io信息topDisplaydynamicreal-timeinformationaboutrunningprocesses.Moreinformation:https://manned.org/top.单词解释:PID:......
  • 服务器内存占用高,如何排查是哪个项目占用的资源?
    服务器内存占用高,如何排查是哪个项目占用的资源?最直观的查看方式ps-e-opid,user,%mem,command--sort=-%mem|headA1要查看服务器上的哪个项目占用资源,可以执行以......
  • [MySql] 数据库死锁的排查和相关知识
    查看数据库最近的一次死锁执行以下命令:showengineinnodbstatus;查询结果......------------------------LATESTDETECTEDDEADLOCK------------------------2......
  • 操作系统——虚拟内存
    摘要虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储......
  • 深入了解 JavaScript 内存泄漏
    作者:京东零售谢天在任何语言开发的过程中,对于内存的管理都非常重要,JavaScript也不例外。然而在前端浏览器中,用户一般不会在一个页面停留很久,即使有一点内存泄漏,重新加......
  • C++温故补缺(十二):动态内存
    C++动态内存同C,C++中也是有堆和栈的概念。栈是函数内部声明的所有变量都所占用空间,堆是程序中未使用的内存,在程序运行期间可用于动态分配。同样也有alloc()分配内存,新增......
  • 微服务(一):内存穿透和内存雪崩
    如何降低内存穿透风险?布隆过滤器(英語:BloomFilter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在......