生成和查看dump文件

news2025/1/16 16:39:39

在日常开发中,即使代码写得有多谨慎,免不了还是会发生各种意外的事件,比如服务器内存突然飙高,又或者发生内存溢出(OOM)。当发生这种情况时,我们怎么去排查,怎么去分析原因呢?

1. 什么是dump文件?

dump文件是一个进程或者系统在某一个给定的时间的快照。
dump文件是用来给驱动程序编写人员调试驱动程序用的,这种文件必须用专用工具软件打开。
dump文件中包含了程序运行的模块信息、线程信息、堆栈调用信息、异常信息等数据。
在服务器运行我们的Java程序时,是无法跟踪代码的,所以当发生线上事故时,dump文件就成了一个很关键的分析点。

2. 如何生成dump文件?

这里介绍两种方式:

一种是主动的
一种是被动的

方式一
主动生成dump文件。首先要查找运行的Java程序的pid。
使用top命令:
在这里插入图片描述

然后使用jmap命令生成dump文件。file后面是保存的文件名称,1246则是java程序的PID。

jmap -dump:format=b,file=/Users/zhangjiguo/dump.hprof 1246

命令中的1246是需要dump文件的java进程的pid(括号及括号中的内容要记得删掉),可以通过top命令进行获取

方式二
其实在很多时候我们是不知道何时会发生OOM,所以需要在发生OOM时自动生成dump文件。
其实很简单,只需要在启动时加上如下参数即可。HeapDumpPath表示生成dump文件保存的目录。
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\tmp
我们还需要模拟出OOM错误,以此触发产生dump文件,首先写个接口:

private static Map<String, String> map = new HashMap<>();

@RequestMapping("/oom")
public String oom() throws Exception {
    for (int i = 0; i < 100000; i++) {
        map.put("key" + i, "value" + i);
    }
    return "oom";
}

然后在启动时设置堆内存大小为32M。
-Xms32M -Xmx32M
因为要后台启动,并且输出日志,所以最后启动命令就是这样:

 java -Xms32M -Xmx32M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/zhangjiguo/dump.hprof  -jar auth-client-api-1.0.0.RELEASE.jar

然后请求oom的接口,查看日志,果然发生了OOM错误。
查看保存dump的目录,果然生成了对应的dump文件。

3. 如何查看dump文件?

这里我介绍使用Jprofiler,有可视化界面,功能也比较完善。

3.使用JProfiler打开
打开比较久,需耐心等待,千万不要点skip
在这里插入图片描述

4.查看Classes
在这里插入图片描述

5.查看Reference
5.1 选择一个class或者biggest object
在这里插入图片描述

5.2 Use Slected Objects
在这里插入图片描述

5.3 Incoming references
在这里插入图片描述

  • incoming references 显示这个对象被谁引用
  • outcoming references 显示这个对象引用的其他对象

6.查看
在这里插入图片描述

7.查看Graph
在这里插入图片描述

8.查看代码
在这里插入图片描述

该方法主要用来导出数据报表,可以看出,当list数量太大时,就会导致OOM

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

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

相关文章

云服务器迁移 (全网最省钱最详细攻略)

0x00 背景服务器续费比较贵&#xff0c;由于旧的云服务器用的时间比较长&#xff0c;上面部署的应用&#xff0c;环境复杂、数据多&#xff0c;在新的服务器部署比较麻烦&#xff0c;所以想到把服务器环境制作成镜像。新服务器的选择上&#xff0c;我这里选择的天翼云服务器&am…

IGKBoard(imx6ull)-PWM编程蜂鸣器编程控制

文章目录1- PWM介绍2- PWM使能&#xff08;1&#xff09;添加配置&#xff08;2&#xff09;export、unexport与npwm属性文件&#xff08;3&#xff09;duty_cycle、enable和period属性文件3- PWM测试编程&#xff08;1&#xff09;PWM8管脚连接&#xff08;2&#xff09;流程介…

京东JDBook笔记本怎么安装Win10系统使用?

京东JDBook笔记本怎么安装Win10系统使用&#xff1f;有用户使用的京东JDBook笔记本电脑系统是Win7系统的&#xff0c;最近想要去将系统升级到Win10来使用。那么如何将Win7的系统重装Win10呢&#xff1f;以下为大家带来详细的操作步骤图文教程。 准备工作&#xff1a; 1、U盘一个…

视频和视频帧:FFMPEG CPU解码API介绍

写在前面本文将介绍的如何用FFMPEG API做视频解码。视频解码&#xff0c;是将压缩后的视频&#xff08;压缩格式如H264&#xff09;通过对应解码算法还原为YUV视频流的过程&#xff1b;在计算机看来&#xff0c;首先输入一段01串&#xff08;压缩的视频&#xff09;&#xff0c…

用 @types 前缀的包是什么?有什么用?

前言 解决过 TypeScript 的项目大概都是从两个方向&#xff0c;Vue3 方向和 React Native 方向&#xff0c;而在 React Native 方向上我经常会遇到一个烦人的错误 Could not find a declaration file for module ‘juejin-type-study’. ‘d:/fe-project/nodejs/types-study/n…

看懂这篇文章-你就懂了信息安全的密码学

一、前言一个信息系统缺少不了信息安全模块&#xff0c;今天就带着大家全面了解并学习一下信息安全中的密码学知识&#xff0c;本文将会通过案例展示让你了解抽象的密码学知识&#xff0c;阅读本文你将会有如下收获&#xff1a; 熟悉现代密码学体系包含的主流密码技术 掌握Base…

SignalR 实时通讯

SignalR 实时通讯1.SignalR1.1.SignalR 简介1.2.SignalR 功能1.3.传输1.4.中心2.服务器2.1.配置中心2.2.上下文对象2.3.客户端对象2.4.创建2.5.中心功能实现4.客户端6.案例演示&#xff08;DotNet 客户端&#xff09;1.SignalR 1.1.SignalR 简介 SignalR 是一个开放源代码库&a…

内容感知、AI融合:让实景三维看山是山,看水是水

实景三维具备还原客观物理世界的优势性&#xff0c;但也正由于部分真实性的欠缺备受争议。这是因为传统的三维建模软件大多基于像元的匹配与计算的逻辑&#xff0c;对地物进行无差别的重建处理&#xff0c;最终生成的模型看起来扭曲怪异、残缺变形。常见的模型缺陷有&#xff1…

2022 OpenCV Spatial AI大赛前三名项目分享,开源、上手即用,优化了OAK智能双目相机的深度效果。

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…

深圳居住证申领指南

打开广东政务服务网&#xff0c;在首页搜索【深圳经济特区居住证申领】在搜索结果中可以发现有如下链接&#xff0c;点击在线办理 会转到登陆界面&#xff0c;直接使用个人登录并用微信扫描登录 根据提示进行手机登录验证。 完成登录认证之后会自转到深圳经济特区居住证申领界…

二分查找由浅入深--算法--java

二分查找写在开头算法前提&#xff1a;算法逻辑算法实现简单实现leftright可能超过int表示的最大限度代码分析和变换更多需求&#xff1a;求索引最小的值java二分API应用基础题思考难度方法写在开头 二分查找应该是算比较简单的这种算法了&#xff0c;我本以为还可以。但有时候…

Word处理控件Aspose.Words功能演示:使用 Java 比较 MS Word 文档

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c; Aspose API支持流行文件格式处…

动态规划初阶-爬楼梯问题

示例1&#xff1a; 输入&#xff1a;cost [10,15,20] 输出&#xff1a;15 解释&#xff1a;你将从下标为 1 的台阶开始。 - 支付 15 &#xff0c;向上爬两个台阶&#xff0c;到达楼梯顶部。 总花费为 15 。示例2&#xff1a; 输入&#xff1a;cost [1,100,1,1,1,100,1,1,10…

使用Docker安装MongoDB,整合SpringBoot

使用Docker安装MongoDB MongoDB 和 MySQL 都是常用的数据库管理系统&#xff0c;但它们的设计目标不同&#xff0c;因此在某些方面的性能表现也有所不同。 MongoDB 是一个文档型数据库&#xff0c;它采用了面向文档的数据模型&#xff0c;支持动态查询和索引&#xff0c;适合…

Docker部署实战

文章目录Docker部署应用准备制作容器镜像启动容器上传镜像docker exec数据卷&#xff08;Volume&#xff09;声明原理实践Docker部署 应用准备 这一次&#xff0c;我们来用 Docker 部署一个用 Python 编写的 Web 应用。这个应用的代码部分&#xff08;app.py&#xff09;非常…

【同步、共享和内容协作软件】上海道宁与​ownCloud让您的团队随时随地在任何设备上轻松处理数据

ownCloud是 一款开源文件同步、共享和 内容协作软件 可让团队随时随地 在任何设备上轻松处理数据 ownCloud开发并提供 用于内容协作的开源软件 使团队能够轻松地无缝 共享和处理文件 而无需考虑设备或位置 开发商介绍 ownCloud成立于2010年&#xff0c;是一个托管和同…

设计模式-笔记

文章目录七大原则单例模式桥模式 bridge观察者模式 observer责任链模式 Chain of Responsibility命令模式 Command迭代器模式 Iterator中介者模式 Mediator享元模式 Flyweight Pattern组合模式 composite装饰模式 Decorator外观模式 Facade简单工厂模式工厂方法模式工厂抽象模式…

Postgresql中的unlogged table

在PG中&#xff0c;有一种表的类型为unlogged table&#xff0c;名如其字&#xff0c;该种类型的表不会写入wal日志中&#xff0c;所以在写入的速度上比普通的堆表快很多&#xff0c;但是该表在数据库崩溃的时候&#xff0c;会被truncate,数据会丢失&#xff0c;而且该表也不支…

Leetcode21. 合并两个有序链表

一、题目描述&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4]输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2…

Java程序开发中如何使用lntelliJ IDEA?

完成了IDEA的安装与启动&#xff0c;下面使用IDEA创建一个Java程序&#xff0c;实现在控制台上打印HelloWorld!的功能&#xff0c;具体步骤如下。 1.创建Java项目 进入New Project界面后&#xff0c;单击New Project选项按钮创建新项目&#xff0c;弹出New Project对话框&…