Java jvm 内存溢出分析

1.如何分析jvm内存溢出呢

我们经常用visualVm监控Jvm的内存,cpu,线程的使用情况,通常可以根据内存不断增长来判断内存是否存在不释放。但是我们不可能时时盯着去看,这里涉及jvm堆内存配置,堆内存参数配置和调优会在其他章节编写。

如果真是内存溢出了,线上出现的我们需要配置JVm内存溢出,建议线上一定要配置此参数XX:+HeapDumpOnOutOfMemoryError,否则到时不好分析线上问题。

-Xms100m -Xmx100m -XX:+HeapDumpOnOutOfMemoryError 

 2.编写我们自己的代码

接下来我们模拟内存溢出代码 

@Getter
@Setter
@ToString
public class HeapBean {private int userId;private String name;private String phone;
}
package com.es.Controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@RestController
public class HeapController {private List<HeapBean> userlist = new ArrayList<>();private Map hashMap=new HashMap<>();//堆区内存溢出@GetMapping("/heapOom")public void heapOverTest() {int i = 0;while (true) {//heaplist.add(new heapBean());hashMap.put(i, new HeapBean());i++;}}
}

本地启动代码,后请求实际地址。

运行到一定时间,就会生成hprof文件。

java.lang.OutOfMemoryError: GC overhead limit exceeded
Dumping heap to java_pid16868.hprof ...
Heap dump file created [171733163 bytes in 0.854 secs]
Exception in thread "File Watcher" java.lang.OutOfMemoryError: GC overhead limit exceededat java.lang.String.toLowerCase(String.java:2647)at java.io.WinNTFileSystem.hashCode(WinNTFileSystem.java:640)at java.io.File.hashCode(File.java:2132)at org.springframework.boot.devtools.filewatch.FileSnapshot.hashCode(FileSnapshot.java:72)at java.util.HashMap.hash(HashMap.java:338)at java.util.HashMap.put(HashMap.java:611)at java.util.HashSet.add(HashSet.java:219)at org.springframework.boot.devtools.filewatch.DirectorySnapshot.collectFiles(DirectorySnapshot.java:70)at org.springframework.boot.devtools.filewatch.DirectorySnapshot.collectFiles(DirectorySnapshot.java:67)

通过everything找到这个文件.

 

3.需要用到eclipse Memory Analyzer工具

Eclipse Memory Analyzer(简称MAT)是一个功能丰富且操作简单的JVM Heap Dump分析工具,可以用来辅助发现内存泄漏减少内存占用。

点击下载

 点击“MemoryAnalyzer.exe”,启动分析内存工具。

 打开java_pid16868.hprof文件

按照红色点击确认,看到占用最多的4.5m。

往下移动看到具体占用的类

点击details,看到我们自己的类。

 继续往下,看到对象的总数和占用的堆内存。

4.总结 

 总结最后到时HeapControler中的hashMap导致的内存溢出。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鼠标右键使用VSCode打开文件或文件夹配置

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

英诺森 “供应链智能数据平台”荣获“科技进步奖”

近日&#xff0c;2023年中国物流与采购联合会科学技术奖正式公布&#xff0c;该奖项经国家科技部批准&#xff0c;在国家科学技术奖励工作办公室登记备案&#xff0c;是我国物流行业最具影响力的奖项之一。 英诺森联合客户申报的科技项目“英诺森供应链智能数据平台”&#xf…

Qt day2

目录 1.多态&#xff0c;虚函数&#xff0c;纯虚函数 1.多态性&#xff08;Polymorphism&#xff09;&#xff1a; 2.虚函数&#xff08;Virtual Function&#xff09;&#xff1a; 3.纯虚函数&#xff08;Pure Virtual Function&#xff09;&#xff1a; 将引用作为函数参…

leetcode 205. 同构字符串

2023.9.6 本题维护两个映射表map&#xff0c;若发现无法对应则返回false。 代码如下&#xff1a; class Solution { public:bool isIsomorphic(string s, string t) {unordered_map<char,char> m1;unordered_map<char,char> m2;for(int i0; i<s.size(); i){//相…

Matlab进阶绘图第27期—水平双向堆叠图

在上一期文章中&#xff0c;分享了Matlab双向堆叠图的绘制方法&#xff1a; 进一步&#xff0c;再来看一下水平双向堆叠图的绘制方法&#xff08;由于Matlab中未收录水平双向堆叠图的绘制函数&#xff0c;因此需要大家自行设法解决&#xff09;。 先来看一下成品效果&#xff…

CPU 伪共享是如何发生的?又该如何避免?

CPU 如何读写数据的&#xff1f; 先来认识一下 CPU 的架构 一个 CPU 里通常会有多个 CPU 核心&#xff0c;并且每个 CPU 核心都有自己的 L1 Cache 和 L2 Cache&#xff0c;而 L1 Cache 通常分为&#xff08;数据缓存&#xff09;和&#xff08;指令缓存&#xff09;&#xff0…

【Apollo学习笔记】——规划模块TASK之PIECEWISE_JERK_NONLINEAR_SPEED_OPTIMIZER(二)

文章目录 TASK系列解析文章OptimizeByNLP1.get_nlp_info()定义问题规模2.get_bounds_info()定义约束边界约束3.get_starting_point()定义初值4.eval_f()求解目标函数5.eval_grad_f()求解梯度6.eval_g()求解约束函数7.eval_jac_g()求解约束雅可比矩阵8.eval_h()求解黑塞矩阵9. f…

2023数模A题——定日镜场的优化问题

A题——定日镜场的优化问题 思路&#xff1a;该题主要考察的几何知识和天文学知识&#xff0c;需要不同角度下的镜面和遮挡情况。 资料获取 问题1&#xff1a; 若将吸收塔建于该圆形定日镜场中心&#xff0c;定日镜尺寸均为 6 m6 m&#xff0c;安装高度均为 4 m&#xff0c;且…

多目标应用:基于多目标哈里斯鹰优化算法(MOHHO)的微电网多目标优化调度研究MATLAB

一、微网系统运行优化模型 参考文献&#xff1a; [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、多目标哈里斯鹰优化算法MOHHO 多目标哈里斯鹰优化算法&#xff08;Multi-Objective Harris Hawks Optimizer&#…

day-41 代码随想录算法训练营(19)动态规划 part 03

343.整数拆分 思路&#xff1a; 1.dp存储的是第i个数&#xff0c;拆分之后最大乘积2.dp[i]max(dp[i],max(j*(i-j),j*dp[i-j]));3.初始化&#xff1a;dp[0]dp[1]0,dp[2]1;4.遍历顺序&#xff1a;外层循环 3-n&#xff0c;内层循环 1-i 2.涉及两次取max&#xff1a; dp[i] 表…

【C语言】错题本(2)

题目: 将题目代码粘贴在下面便于分析: #define MAX_SIZE AB struct _Record_Struct {unsigned char Env_Alarm_ID : 4;unsigned char Para1 : 2;unsigned char state;unsigned char avail : 1;}*Env_Alarm_Record;struct _Record_Struct *pointer (struct _Record_Struct*)m…

0基础学习VR全景平台篇 第95篇:VR实景智慧导航操作手册

一、实景导航前期准备工作及点位采集 &#xff08;一&#xff09;实景导航前期准备工作 &#xff08;1&#xff09;拍摄设备 1.推荐相机&#xff1a;全画幅的佳能 Canon EOS​ 5D Mark IV 2.搭配镜头&#xff1a;原厂的佳能 Canon EF卡口 8-15mm 全画幅鱼眼镜头 3.三角架 …

算法通关村16关 | 堆与滑动窗口问题结合

1. 堆与滑动窗口问题结合 题目 LeetCode239 给你一个整数数组nums&#xff0c;有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧&#xff0c;你可以看到在滑动窗口内的k个数字&#xff0c;滑动窗口每次只向右移动一位&#xff0c;返回滑动窗口中的最大值。 思路 对于…

IT运维:使用数据分析平台监控飞塔防火墙

概述 本文可以认为是基于《FortiGate防火墙日志审计运维》文章做的进一步延伸。主要介绍在飞塔防火墙日志进入到鸿鹄后&#xff0c;如何进行字段抽取&#xff0c;以及图表的展示。 字段抽取&#xff1a;采用键值抽取 图表展示&#xff1a;本文将增加一下略复杂的语句&#xff…

一文了解评估 K8s 原生存储产品需要关注的关键能力

近些年&#xff0c;越来越多的企业使用 Kubernetes&#xff08;K8s&#xff09;支持生产环境关键业务。这些业务往往对存储性能和稳定性具有更高的要求&#xff0c;传统存储方案难以充分满足&#xff0c;因此不少用户开始关注更契合 K8s 环境的 K8s 原生存储方案。 不过&#…

使用P5.js来制作一个快乐的小风车动画

p5.js简介 前一段时间偶然了解到一个觉得很好玩儿的东西p5.js,于是就去了解了一下&#xff0c;发现可以自己设计一些有趣的动画效果&#xff0c;设计出来的动画可以放置到页面当中&#xff0c;而且也是简单易学的。 下面是一段官方的介绍&#xff1a; p5.js是一个以 Processi…

Redis进阶

目录 一、持久化&#xff08;重点&#xff09; RDB &#xff08;Redis DataBase&#xff09; 触发机制 如何恢复rdb文件&#xff1f; AOF&#xff08;Append Only File&#xff09; 二、Redis发布订阅 命令 测试 原理 三、Redis主从复制&#xff08;重点) 概念 主从…

岩土工程安全监测利器:振弦采集仪的发展

岩土工程安全监测利器&#xff1a;振弦采集仪的发展 岩土工程安全监测是保障建筑物、地下工程和地质环境安全稳定运行的重要手段。传统上&#xff0c;监测手段主要依靠人工巡视以及基础设施安装的传感器&#xff0c;但是这些方法都存在着缺陷。人工巡视存在的问题是数据采集精…

React v6(仅支持函数组件,不支持类组件)与v5版本路由使用详情和区别(详细版)

1.路由安装(默认安装最新版本6.15.0) npm i react-router-dom 2.路由模式 有常用两种路由模式可选&#xff1a;HashRouter 和 BrowserRouter。 ①HashRouter&#xff1a;URL中采用的是hash(#)部分去创建路由。 ②BrowserRouter&#xff1a;URL采用真实的URL资源&#xff0c;…

c++类与对象

文章目录 前言一、1、类的引入2、类的定义3、类的访问限定符及封装4、类的实例化5、类对象模型6、this指针7、封装 前言 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关…