Java的dump文件分析及JProfiler使用
Java的dump文件分析及JProfiler使用
1 dump文件介绍
从软件开发的角度上,dump文件就是当程序产生异常时,用来记录当时的程序状态信息(例如堆栈的状态),用于程序开发定位问题。
idea配置发生OOM的时候指定路径生成dump文件
# 指定发生OOM异常的时候,在d盘下生成对应的dump文件
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:\
2 JProfiler介绍
2.1 下载
JProfiler下载:
链接:https://pan.baidu.com/s/1WXCc4FMOC3QQtjkhY4Qeow
提取码:5xrm
版本:JProfiler 12.0.4
2.2 与idea集成
-
本地windows下载并安装好JProfiler
-
idea安装JProfiler插件

-
指定本地windows的JProfiler路径[settings - tools]

4. 点击图标启动,JProfiler就默认监控到了指定Java程序

2.3 基本使用
①JProfiler基本参数
②测试分析dump文件
- 模拟OOM
public class JProfilerTest {public static void main(String[] args) throws InterruptedException {List<byte[]> list = new ArrayList<>();while (true) {byte[] bytes = new byte[1024 * 1024 * 50];list.add(bytes);TimeUnit.SECONDS.sleep(1);}}
}
- 程序添加VM Options
# 监控OOM,发生OOM之后指定dump文件生成到d:\
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:\

- JProfiler方式启动程序,观察控制台打印
程序运行一段时间之后,发生OOM异常

5. 查看dump文件,用JProfiler打开

6. 分析dump文件

查看最大对象内部结构

可以发现是改list中含有了太多的byte[]数组
ps:其他查看方法类似
3 常见JVM问题
3.1 OOM
①堆溢出
原因:
1. 无法在Java堆中分配对象
2. 应用程序保存了无法被GC回收的对象
3. 程序过度使用finalizer
排查思路:
- 查看关键报错信息
- 使用内存映像分析工具(MAT或JProfiler)分析dump文件,分析是内存泄漏还是内存溢出
- 如果是内存泄漏,通过工具查看泄漏对象到GC Roots引用链,修复内存泄漏
- 如果不是,检查代码是否有死循环,递归等,再考虑用
-Xmx增加堆大小
demo代码JVM配置参数:
- -Xms20m JVM初始分配的内存20m
- -Xmx20m JVM最大可用内存为20m
- -XX:+HeapDumpOnOutOfMemoryError 当JVM发生OOM时,自动生成DUMP文件
- -XX:HeapDumpPath=/Users/mytest/Desktop/dump/ 生成DUMP文件的路径
②栈溢出
栈:虚拟机栈和本地方法栈,关于栈,Java虚拟机规范中描述了两种异常:
StackOverflowError:线程请求的栈深度大于虚拟机所允许的深度OOM:如果虚拟机栈可以动态扩展,当扩展时无法申请到足够的内存时会抛出
原因:
1. 单个线程下,栈帧太大或虚拟机栈容量太小,内存无法分配
2. 不断建立线程
排查思路:
- 查看关键报错信息,确定是StackOverflow还是OOM
- 如果是StackOverflow,检查代码是否存在递归
- 如果是OOM,检查是否有死循环创建线程或调用第三方接口创建线程,通过
-Xss降低每个线程栈大小
③方法区溢出
方法区(又叫永久代,JDK8之后元空间替换了永久代),用于存放Class的相关信息,如:类名、访问修饰符、常量池、字段描述、方法描述等。运行时产生大量的类,会填满方法区,造成溢出。
溢出原因:
1. 使用CGLib生成大量代理类
2. 在Jdk7之前,频繁错误的使用String.intern方法
3. 大量jsp和动态产生jsp
4. 应用长时间运行,没有重启
排查思路:
- 检查是否永久代空间设置的过小
-XX:MetaspaceSize=10M -XX:MaxMetaspaceSize=10M- 是否频繁错误使用String.intern
- 是否与jsp有关
- 是否使用CGLib生成大量代理类
- 重启JVM
④直接内存溢出
直接内存不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。但是,这部分也被频繁的使用,也可能导致OOM。
原因:
1. 本机直接内存不受到Java堆大小限制,但是受到本机总内存大小限制
2. 直接内存由-XX:MaxDirectMemorySize指定,如果不指定,默认与Java堆最大值一样(-Xmx)
3. NIO程序中,使用ByteBuffer.allocateDirect(capability)分配的是直接内存,可能导致直接内存溢出
排查思路:
- 检查代码是否恰当
- 检查JVM参数
-Xmx(java堆最大值),-XX:MaxDirectMemorySize是否合理
参考:https://zhuanlan.zhihu.com/p/95150243
相关文章:
Java的dump文件分析及JProfiler使用
Java的dump文件分析及JProfiler使用 1 dump文件介绍 从软件开发的角度上,dump文件就是当程序产生异常时,用来记录当时的程序状态信息(例如堆栈的状态),用于程序开发定位问题。 idea配置发生OOM的时候指定路径生成dump文件 # 指定…...
sympy高斯光束模型
文章目录Gauss模型sympy封装实战sympy.phisics.optics.gaussopt集成了高斯光学中的常见对象,包括光线和光学元件等,有了这些东西,就可以制作一个光学仿真系统。Gauss模型 高斯光束的基本模型为 E(r,z)E0ω0ω(z)exp[−r2ω2(z)]exp[−ik…...
Cloudflared 内网穿透 使用记录
Cloudflared 内网穿透前提创建cloudflared tunnel我使用的服务前提 你必须要有一个域名,并且可以改域名的dns解析服务商到cloudflare 1.登录到cloudflare后台,点击添加站点 2.输入自己的域名,下一步选择免费套餐 3.他会搜索这个域名下已有…...
柴油发电机组的调压板
1 概述 柴油发电机组的调压板是一种用于控制发电机输出电压的装置。它通常由一块电子电路板和一个电子电路板上的电位器组成。 当发电机运行时,它会产生电压,然后通过调压板中的电路进行控制。调压板中的电路会检测输出电压的大小,并通过电…...
【MySQL】表操作和库操作
文章目录概念库操作1.创建数据库2.删除数据库3.选择数据库4.显示数据库列表表操作1.创建数据表CREATE2.删除数据表DROP3.插入数据INSERT4.更新数据UPDATE5.修改数据ALTER6.查询数据SELECT7.WHERE子句8.ORDER BY子句9.LIMIT子句10.GROUP BY子句11.HAVING子句使用注意事项概念 M…...
拓扑排序的思想?用代码怎么实现
目录 一、拓扑排序的思想 二、代码实现(C) 代码思想 核心代码 完整代码 一、拓扑排序的思想 以西红柿炒鸡蛋这道菜为例,其中的做饭流程为: 中间2 6 3 7 4的顺序都可以任意调换,但1和5必须在最前面,这是…...
【Git】码云
目录 5、 Git 团队协作机制 5.1 团队内协作 5.2 跨团队协作 6、 Gitee码云 操作 6.1 创建远程仓库 6.2 远程仓库操作 6.3 SSH 免密登录 5、 Git 团队协作机制 5.1 团队内协作 5.2 跨团队协作 6、 Gitee码云 操作 码云网址: https://githee.com/ 账号验证…...
数据结构与算法(三):栈与队列
上一篇《数据结构与算法(二):线性表》中介绍了数据结构中线性表的两种不同实现——顺序表与链表。这一篇主要介绍线性表中比较特殊的两种数据结构——栈与队列。首先必须明确一点,栈和队列都是线性表,它们中的元素都具…...
Spring架构篇--2.5.2 远程通信基础Select 源码篇--window--sokcet.register
前言:通过Selector.open() 获取到Selector 的选择器后,服务端和客户的socket 都可以通过register 进行socker 的注册; 服务端 ServerSocketChannel 的注册: ServerSocketChannel serverSocketChannel ServerSocketChannel.open(…...
ISIS协议
ISIS协议基础简介应用场景路由计算过程地址结构路由器分类邻居Hello报文邻居关系建立DIS及DIS与DR的类比链路状态信息的载体链路状态信息的交互路由算法网络分层路由域区域间路由简介…...
CRM系统哪种品牌的好?这五款简单好用!
CRM系统哪种品牌的好?这五款简单好用! CRM系统是指利用软件、硬件和网络技术,为企业建立一个客户信息收集、管理、分析和利用的信息系统。CRM系统的基础功能主要包括营销自动化、客户管理、销售管理、客服管理、报表分析等,选择合…...
QT_dbus(ipc进程间通讯)
QT_dbus(ipc进程间通讯) 前言: 参考链接: https://www.cnblogs.com/brt3/p/9614899.html https://blog.csdn.net/weixin_43246170/article/details/120994311 https://blog.csdn.net/kchmmd/article/details/118605315 一个大型项目可能需要多个子程序同…...
华为OD机试 - 数组排序(C++) | 附带编码思路 【2023】
刷算法题之前必看 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12199283.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 华为OD机试题…...
字符串转换为二进制-课后程序(JAVA基础案例教程-黑马程序员编著-第五章-课后作业)
【案例5-4】 字符串转换为二进制 【案例介绍】 1.任务描述 本例要求编写一个程序,从键盘录入一个字符串,将字符串转换为二进制数。在转换时,将字符串中的每个字符单独转换为一个二进制数,将所有二进制数连接起来进行输出。 案…...
SpringIOC
一、为什么要使用Spring? Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。 为…...
Debezium系列之:基于数据库信号表和Kafka信号Topic两种技术方案实现增量快照incremental技术的详细步骤
Debezium系列之:基于数据库信号表和Kafka信号Topic两种技术方案实现增量快照incremental技术的详细步骤 一、需求背景二、增量快照技术实现的两种方案三、基于数据库信号表实现增量快照技术的原理1.基于水印的快照2.信令表3.增量快照4.连接起重启四、基于数据库信号表实现增量…...
华为OD机试 - 第 K 个最小码值的字母(Python) | 机试题+算法思路+考点+代码解析 【2023】
第 K 个最小码值的字母 题目 输入一个由n个大小写字母组成的字符串 按照 ASCII 码值从小到大进行排序 查找字符串中第k个最小 ASCII 码值的字母(k>=1) 输出该字母所在字符串中的位置索引(字符串的第一个位置索引为 0) k如果大于字符串长度则输出最大 ASCII 码值的字母所在…...
PointNet++训练自己的数据集(附源码)
本文针对PointNet强大的三维点云分类功能,详细讲解怎么训练自己的数据集,在此之前,需要确保已经能够跑通源码的训练和测试,如果没有,请参考PointNet的源码运行。数据放置1.1. 在mytensor_shape_names.txt中配置自己的分…...
ROS2可视化利器---Foxglove Studio
0. 简介 之前作者已经讲了《ROS1可视化利器—Webviz》,然后就有读者问,ROS2有没有可以使用的可视化工具呢,答案是肯定的,除了plotjuggler这种ROS1和ROS2通用的可视化利器,还有一种全平台通用的软件FoxgloveStudio&…...
python实战应用讲解-【语法基础篇】流程控制-控制流的元素及语句(附示例代码)
目录 控制流的元素 条件 代码块 程序执行 代码块嵌套 控制流语句 if 语句...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
