java内存占用过大分析,mat内存快照分析

news2025/1/20 3:43:31

背景

最近功能模块上线后,生产内存占用显著提升,查看gc日志发现年轻代频繁从2G回收到60M左右,猜测是在方法中频繁创建大对象导致,由于一时间无法通过review代码找出问题所在,只好将生产jvm内存快照dump后通过java memory analyzer tool进行分析。

介绍

MAT(java memory analyzer tool)是一款基于eclipse免费开源的java内存分析工具,可以用来分析java堆栈溢出,大对象排查等。

下载安装

https://www.eclipse.org/mat/previousReleases.php

使用

  1. 前往服务器dump出jvm内存快照
    命令:jmap -dump:all,format=b,file={快照保存文件名}.hprof {应用pid},dump:all表示dump出所有对象,如jmap -dump:all,format=b,file=jvmall.hprof 3314
  2. 修改mat jvm参数,增加最大堆内存,避免打开大快照出现oom问题
    在这里插入图片描述
    在这里插入图片描述
  3. 打开mat软件,进行自定义设置
    在这里插入图片描述
    设置保留不可达对象,对象占用内存单位根据大小自动按照byte/mb等显示
    在这里插入图片描述
  4. 选择dump出来的jvm快照
    依次点击file -> open heap dump
    在这里插入图片描述
    选择泄露检查,点击完成,等待快照加载完毕
    在这里插入图片描述
    点击查看对象柱状图
    在这里插入图片描述
    根据对象存在堆中的大小进行排序
    在这里插入图片描述
    右键查看大对象集合的引用情况
    在这里插入图片描述
    再次按照对象大小进行排序查看,找到大对象的引用关系,由于有的大对象的引用已被gc回收,因此无法找到具体的引用根节点,需要我们手动筛选下。
    在这里插入图片描述
    从上图可以看出,堆中存在大量base64编码的图片字符串大对象,通过引用关系可以定位到引用到这些大对象的model类,再结合代码最终解决问题。
  5. 修改mat设置后(如从保留不可达对象到只分析可达对象),需要删除上次打开生成的分析文件,再重新启动mat
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/469341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zotero+坚果云打造多设备同步的文献管理工具(保姆级教程)

Zotero坚果云打造多设备同步的文献管理工具(保姆级教程) 文章目录 Zotero坚果云打造多设备同步的文献管理工具(保姆级教程)Zotero介绍所需软件或插件实现方式步骤1:坚果云配置步骤2:Zotero配置步骤3&#x…

细讲shell中的循环语句--for语句

目录 一:何为循环 1.循环概述 2.使用循环的好处 二:for循环语句 1.for语句的用法 ​2. 语法结构 (1)一般格式 (2)类C语言格式 (3)死循环 3.事例 ​4.常用转义符 5.制作九九乘法表 三&…

旧照片修复-模糊图片变清晰-2023年度最强神器 codeformer

CodeFormer是一种基于AI技术深度学习的人脸复原模型,由南洋理工大学和商汤科技联合研究中心联合开发。该模型通过结合了VQGAN和Transformer等技术,可以通过提供模糊或马赛克图像来生成清晰的原始图像。 功能: 1、老照片修复 2、黑白照片彩色…

LeetCode 2641 二叉树的堂兄弟节点 II

LeetCode 2641 二叉树的堂兄弟节点 II 给你一棵二叉树的根 root ,请你将每个节点的值替换成该节点的所有 堂兄弟节点值的和 。 如果两个节点在树中有相同的深度且它们的父节点不同,那么它们互为 堂兄弟 。 请你返回修改值之后,树的根 root …

【Auto-GPT云部署】

部署自己的Auto-Gpt 先说说什么是Chat-Gpt Chat-GPT (Generative Pretrained Transformer)是由OpenAI提出的一种自然语言处理技术,是基于Transformers和预训练机制的大规模语言模型。与传统的基于规则或基于统计的自然语言处理方法不同,Chat-GPT使用深…

【网络抓包工具】tcpdump 最新版本移植到开发板(海思平台)

目录 一、概述 二、libpcap、tcpdump源码下载 三、libpcap、tcpdump交叉编译  👉3.1 交叉编译 libpcap  👉3.2 交叉编译 tcpdump 一、概述 tcpdump是一个功能强大的,用于抓取网络数据包的命令行工具,与带界面的Wireshark一样&am…

CLion开发工具 | 02 - 常用功能配置介绍

专栏介绍 配置项概览 CLion有非常多的配置项,本文将列举一些常用的配置项。 一、外观配置 1. 主题 2. 新UI 新的UI有点VScode化,个人不太喜欢,还是老的这套UI香,所以未开启: 3. 环境变量 IDE除了导入系统/用户的…

应急管理指挥中心大数据信息化管控平台建设方案(ppt可编辑)

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除 篇幅有限,无法完全展示,喜欢资料可转发评论,私信了解更多信息。

力扣刷题2023-04-27-1——题目:1329. 将矩阵按对角线排序

题目: 矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线,沿右下方向一直到矩阵末尾的元素。例如,矩阵 mat 有 6 行 3 列,从 mat[2][0] 开始的 矩阵对角线 将会经过 mat[2][0]、mat[3][1] 和 mat[4][2] 。 …

宝塔防火墙拦截页面代码模板2

宝塔防火墙拦截页面代码模板2 防火墙代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1"><title>云防御<…

最优化方法Python计算:一元函数搜索算法——黄金分割法

黄金分割法是包围策略的经典用例。算法思路为&#xff1a;假定目标函数 f ( x ) f(x) f(x)最优解 x 0 x_0 x0​含于长度为 λ \lambda λ的区间 ( a 0 , b 0 ) (a_0,b_0) (a0​,b0​)内。在区间内插入两个备选点 a 1 ′ , b 1 ′ ∈ ( a 0 , b 0 ) a_1,b_1\in(a_0,b_0) a1′​,…

【网络编程】网络基础

目录 一、协议分层 1、为什么要分层 2、OSI七层模型 3、TCP/IP四层协议&#xff08;五层协议&#xff09; 二、网络传输流程 1、同一个网段内的两台主机进行文件传输 2、跨网段的主机的文件传输 三、IP地址和MAC地址 1、IP地址 2、MAC地址 网络通信的本质就是跨主机的…

Python 输出日志 print 函数的应用(python专栏001)

在Python中&#xff0c;print()函数是一个用于输出内容到标准输出设备的函数&#xff0c;通常用于调试程序和显示程序运行结果 直接使用如下&#xff1a; print(5) print("早起的年轻人")print()函数可以接受多个参数&#xff0c;将它们用空格隔开&#xff0c;并输…

Docker CE介绍和CentOS7.5.1804离线安装Docker CE

文章目录 Docker CE介绍离线安装问题离线安装步骤Docker CE 的优点 Docker CE介绍 Docker CE&#xff08;CE&#xff0c;Community Edition是社区版本的意思&#xff09;是一个免费、开源的应用容器化平台&#xff0c;可帮助开发人员将应用程序打包成容器&#xff0c;并在任何…

【小白入门Linux】—目录结构介绍(一)

【小白入门Linux】—目录结构介绍&#xff08;一&#xff09; linux的方向&#xff1a; linux运维 linux嵌入式开发 在linux下做各种程序开发 应用领域 个人桌面领域 服务器领域&#xff08;java c程序部署到linux服务器&#xff09; 嵌入式&#xff08;运行稳定&#x…

GRE-MGRE综合实验

拓扑结构&#xff1a; 要求 1、R5为网络运营商&#xff08;ISP&#xff09;&#xff0c;接口IP地址均为公有地址&#xff1b; 2、R1与R5间使用PPP的PAP认证&#xff0c;R5为主认证方&#xff1b;R2与R5间使用PPP的chap认证&#xff0c;R5为主认证方&#xff1b;R3与R5间使用HD…

操作系统进程线程(一)—进程线程协程区别、多进程多线程、进程调度算法、进程线程通信

进程线程协程区别 定义上 进程&#xff1a;资源分配和拥有的基本单位&#xff0c;是调度的基本单位。运行一个可执行程序会创建一个或者多个进程&#xff1b;进程就是运行起来的程序线程&#xff1a;程序执行基本单位&#xff0c;轻量级进程。每个进程中都有唯一的主线程&…

React之Redux的使用

文章目录 Redux 介绍概述Redux 是什么&#xff1f;为什么要使用 Redux&#xff1f;我什么时候应该使用 Redux&#xff1f;Redux 库和工具React-ReduxRedux ToolkitRedux DevTools 扩展 Redux 术语和概念State 管理不可变性 Immutability术语ActionAction CreatorReducerReducer…

ChatGPT会一直火热下去吗?他会是下一个AR,区块链吗?

目录 前言 VR 热潮 区块链热潮 元宇宙热潮 ChatGPT 热潮 理智看待 ChatGPT 前言 如果在今年年底评选 2023 年的年度科技热词&#xff0c;以 ChatGPT 目前的热度&#xff0c;毫无疑问会是今年排名第一的科技热词。 即使今年才过去四个月&#xff0c;但我很难想象还有什么科…

JUC多并发编程 ThreadLocal

ThreadLocal 提供线程局部变量。这些变量与正常的变量不同, 因为每一个线程在访问 ThreadLocal 实例的时候(通过其 get 或 set 方法) 都有自己的&#xff0c;独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段, 使用它的目的是希望将状态(例如, 用户ID或事务ID)…