jvisualVM分析jvm内存使用快照dump

news/2024/11/28 5:29:39/

服务发生内存溢出,就需要查看服务器上Java服务的jvm堆内存使用情况,可以使用dump命令生成dump文件,然后下载到本地,然后使用jvisualVM工具打开,即可实现可视化分析。

生成dump文件常用的两种方式:

第一种:使用命令直接生成。

第二种:java -jar启动服务的时候添加dump参数,服务发生内存溢出时自动生成。

目录

1、使用命令直接生成堆dump文件

2、内存溢出发生时自动生成dump文件

3、使用jvisualVM工具打开dump文件


1、使用命令直接生成堆dump文件

发送内存溢出时,可以先使用命令生成dump文件后再重启服务。

登录虚机,执行以下jamp命令

# 替换<pid>为Java进程的ID,file:输出文件名为heap.hprof,可自定义路径
jmap -dump:format=b,file=heap.hprof <pid>

下载到本地。

2、内存溢出发生时自动生成dump文件

java -jar启动服务的时候添加dump参数,服务发生内存溢出时自动生成dump文件。

-XX:+HeapDumpOnOutOfMemoryError 当OutOfMemoryError发生时生成dump文件

-XX:HeapDumpPath=生成dump文件的存储目录,如不指定默认生成在jar所在目录,目录一定要存在,否则生成失败。

# 当OutOfMemoryError发生时生成dump文件,-XX:HeapDumpPath指定生成后的文件存储路径
java -jar -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/test/dump/ -Xms64m -Xmx64m  demo-0.0.1-SNAPSHOT.jar

3、使用jvisualVM工具打开dump文件

jvisualVM位置,jdk安装目录下的bin目录下,例:E:\java\jdk\jdk1.8.0_333\bin\jvisualvm.exe,

启动jvisualVM后选择打开dump文件

可以看到服务中占有内存比较多的类

这里是用了一个demo做测试,通过调用接口创建大量的user实例,占用大量的jvm堆内存

@RestController
public class BasicController {private Map<String,User> map_test = new HashMap<>();@RequestMapping("/add")public String add() {for (int i = 0; i < 50000; i++) {User user = new User();user.setName(UUID.randomUUID().toString());map_test.put(UUID.randomUUID().toString(),user);}return "ok";}
}

双击类跳转到试例数页面,如下

通过分析就可以知道是哪里出现的问题。

如果使用了springBootAdmin监控服务,可以直接在页面下载对应的dump文件。

spring boot admin 搭建(非常简单)_springbootadmin搭建-CSDN博客


http://www.ppmy.cn/news/1418602.html

相关文章

三 maven的依赖管理

一 maven依赖管理 Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题&#xff0c;使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中&#xff0c;避免出现版本冲突和依赖缺失等…

6.5-1Python之列表嵌套字典的使用

基于字典的客户信息管理系统&#xff0c;使用列表嵌套字典完成。 代码逻辑参考【5.5Python之列表的嵌套使用】 在此基础上做优化处理&#xff1a; # 初始化客户信息--列表嵌套字典 customers [{"name": "Alice", "age": 25, "email&quo…

宜搭无权查询该应用信息,唯一排查码:21081d4e17130865292352743e9ed8

这种问题可能是关联表单出现了问题&#xff0c;当前应用中没有这个表单 所以就出现了应用无权访问的问题

LeetCode题练习与总结:有效数字--65

一、题目描述 有效数字&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; 1. 一个 小数 或者 整数 2. &#xff08;可选&#xff09;一个 e 或 E &#xff0c;后面跟着一个 整数 小数&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; 1. &…

Open CASCADE学习|实现Extrude功能

首先定义了一些基本的几何元素&#xff0c;如线、圆和平面&#xff0c;然后使用makeExtrudebydir函数来对一个面进行挤出操作。下面是详细过程&#xff1a; 定义Extrude函数&#xff1a;makeExtrudebydir函数接受一个TopoDS_Shape对象和一个gp_Vec对象作为参数。TopoDS_Shape是…

安卓刷机fastboot分段传输

win10 fastboot 无法识别&#xff0c;驱动下载地址GitHub - xushuan/google_latest_usb_driver_windows 把inf文件更新到设备管理器驱动更新即可 问题 archive does not contain super_empty.img Sending vbmeta_a (4 KB) OKAY [ 0.117s] Writing …

通讯录的实现(顺序表版本)

我们知道通讯录是基于顺序表的前提下&#xff0c;要写好通讯录我们就要深入了解好顺序表。我们先来看看什么是顺序表。&#xff08;注意今天代码量有点多&#xff0c;坚持一下&#xff09;。冲啊&#xff01;兄弟们&#xff01; 顺序表的简单理解 对于顺序表&#xff0c;我们首…

45.HarmonyOS鸿蒙系统 App(ArkUI)创建列表(List)

列表是一种复杂的容器&#xff0c;当列表项达到一定数量&#xff0c;内容超过屏幕大小时&#xff0c;可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集&#xff0c;例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求&#xff08;如通讯录、音乐列…