iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java生成堆内存dump的问题
  • 152
分享到

Java生成堆内存dump的问题

Java dumpJava堆内存dumpJava堆内存 2022-12-29 09:12:24 152人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录Java生成堆内存dump那么java如何打出dump文件呢?JVM生成dump文件出现OOM时自动生成堆dump人工通过执行指令,直接生成当前JVM的dump文件总结Java生

Java生成堆内存dump

在处理压力测试问题的时候,遇到OOM的情况,这时候我们需要去记录内存实时的情况,一般会打出一个dump文件,而后再使用MAT等内存分析工具去查看哪些对象一直占用了大量内存,最终分析出代码需要优化的地方。

那么java如何打出dump文件呢?

java提供了jmap命令,如下:

jmap -dump:fORMat=b,file=/path/heap.bin 进程ID  
jmap -dump:live,format=b,file=/path/heap.bin 进程ID  

live参数:

表示我们需要抓取目前在生命周期内的内存对象,也就是说GC收不走的对象,然后我们绝大部分情况下,需要的看的就是这些内存。而且会减小dump文件的大小。

在命令行下可以直接运行,当然使用java也可以按指定方式执行,示例如下:

package com.szh;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
import java.util.concurrent.TimeUnit;
 
public class TestDump {
    public static void main(String[] args) throws InterruptedException, IOException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
        Runtime runtime = Runtime.getRuntime();
 
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入java进程PID:");
        int pID = scanner.nextInt();
        System.out.println("请输入dump文件输出路径:");
        String dumpPath = scanner.next();
        scanner.close();
 
        if (!dumpPath.endsWith(File.separator)) {
            dumpPath = dumpPath + File.separator;
        }
        String cmd = "jmap -dump,format=b,file=" + dumpPath + "_" + sdf.format(new Date()) + ".bin " + pID;
        runtime.exec(cmd);
        TimeUnit.SECONDS.sleep(5L);
 
        while (true) {
            cmd = "jmap -dump:live,format=b,file=" + dumpPath + "_" + sdf.format(new Date()) + ".bin " + pID;
            Process process = runtime.exec(cmd);
            
            TimeUnit.HOURS.sleep(1L);
        }
    }
}

注意:对象越多dump耗时越久,且dump会导致STW。

如果在生产中,可以加以下参数,在OOM时(已经STW了)自动打dump,

-XX:+HeapDumpOnOutOfMemoryError

jvm生成dump文件

JVM生成dump文件一般有两种方式

出现OOM时自动生成堆dump

JVM启动命令增加两个参数:

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/home/app/dumps/

人工通过执行指令,直接生成当前JVM的dump文件

例如:

jmap -dump:format=b,file=/home/app/testdump.hprof 6218

其中6218是JVM的当前进程号

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Java生成堆内存dump的问题

本文链接: https://www.lsjlt.com/news/176154.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java生成堆内存dump的问题
    目录Java生成堆内存dump那么java如何打出dump文件呢?jvm生成dump文件出现OOM时自动生成堆dump人工通过执行指令,直接生成当前JVM的dump文件总结Java生...
    99+
    2022-12-29
    Java dump Java堆内存dump Java堆内存
  • java堆内存溢出问题怎么解决
    Java堆内存溢出问题的解决方法有以下几种: 增加堆内存大小:可以通过修改JVM的启动参数,增加堆内存的大小,例如增加-Xmx参...
    99+
    2023-10-27
    java
  • 关于JVM默认堆内存大小问题
    目录JVM默认堆内存大小堆内存JVM默认分配堆内存是多少总结JVM默认堆内存大小 我们都知道jvm有一个堆内存的概念,我们可以通过-Xmx:最大堆内存,-Xms初始化堆内存来进行设置...
    99+
    2023-02-14
    JVM默认堆内存大小 JVM默认堆 JVM堆内存大小
  • Java堆栈内存、堆外内存、零拷贝的示例分析
    这篇文章将为大家详细讲解有关Java堆栈内存、堆外内存、零拷贝的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、堆栈内存堆栈内存,顾名思义,指的是堆内存以及栈内存,其中,堆内存是由Java GC...
    99+
    2023-06-15
  • 教你用MAT工具分析Java堆内存泄漏问题的解决方法
    一、MAT概述与安装 MAT,全称Memory Analysis Tools,是一款分析Java堆内存的工具,可以快速定位到堆内泄漏问题。该工具提供了两种使用方式,一种是插件版,可以...
    99+
    2024-04-02
  • java生成自增编号数字的问题
    目录java生成自增编号数字java生成一定规则递增编号java生成自增编号数字 最近有业务需求,编号自增。 1、查询数据最大编号,该字段为字符串 SELECT max(no...
    99+
    2024-04-02
  • Java 内存泄露问题详解
    目录 1、什么是内存泄露? 2、Java 中可能导致内存泄露的场景 3、长生命周期对象持有短生命周期对象引用造成的内存泄露问题示例 4、静态集合类持有对象引用造成内存泄露问题的示例 1、什么是内存泄露?         内存泄露指的是程...
    99+
    2023-09-08
    Java 内存泄露
  • Java基础之堆内存溢出的解决
    目录一、实战-内存溢出二、实战-堆内存溢出三、堆内存溢出演示代码四、Eclipse Memory Analyzer 分析流程五、堆内存溢出的场景六、商城项目可能存在堆内存溢出的方法一...
    99+
    2024-04-02
  • Java安全之Tomcat6Filter内存马问题
    目录回顾Tomcat8打法探索Tomcat6与Tomcat8之间的区别回顾Tomcat8打法 先回顾下之前Tomcat789的打法 这里先抛开 7 8之间的区别, 在8中,最后add...
    99+
    2022-11-13
    Java安全Tomcat6 Filter内存马 Java Tomcat6内存马 Tomcat Filter内存马
  • Java的内存泄漏问题怎么解决
    本篇内容介绍了“Java的内存泄漏问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一问题的提出Java的一个重要优点就是通过垃圾收...
    99+
    2023-06-03
  • Java 内存安全问题的注意事项
    目录前言内存管理Java各版本内存管理改进内存溢出堆内存溢出栈溢出运行时常量池溢出方法区溢出元空间溢出本机直接内存溢出常见案例问题排查前言 Java在内存管理方面是要比C/C++更...
    99+
    2024-04-02
  • Java内存泄露问题实例分析
    本篇内容介绍了“Java内存泄露问题实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java内存泄露问题所谓内存泄露就是指一个不再被程...
    99+
    2023-06-29
  • java内存溢出问题如何排查
    Java内存溢出问题的排查可以按照以下步骤进行:1. 观察错误信息:当Java发生内存溢出时,通常会抛出`java.lang.Out...
    99+
    2023-09-29
    java
  • 深入聊聊Java内存泄露问题
    目录Java内存泄露问题附:内存泄露的典型情况总结Java内存泄露问题 所谓内存泄露就是指一个不再被程序便用的对象或变量一直被占据在内存中。 Java 中有垃圾回收机制,它可以保证一...
    99+
    2024-04-02
  • 如何解决JAVA内存泄漏问题
    本篇内容介绍了“如何解决JAVA内存泄漏问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录什么是内存泄漏内存泄漏的原因内存泄漏有哪些情况...
    99+
    2023-06-20
  • java内存泄漏问题怎么解决
    这篇文章主要介绍“java内存泄漏问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java内存泄漏问题怎么解决”文章能帮助大家解决问题。1、概念Java中的内存泄露是指不再使用的对象的内存...
    99+
    2023-06-30
  • java内存逃逸问题怎么排查
    Java内存逃逸问题通常是指在程序中创建的对象在其作用域之外仍然被引用,导致无法被垃圾收集器回收。以下是一些排查Java内存逃逸问题...
    99+
    2023-10-23
    java
  • 如何理解Java中的内存溢出问题
    这篇文章主要介绍“如何理解Java中的内存溢出问题”,在日常操作中,相信很多人在如何理解Java中的内存溢出问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解Java中的内存溢出问题”的疑惑有所帮助!...
    99+
    2023-06-15
  • Java中的内存溢出问题怎么解决
    本篇内容主要讲解“Java中的内存溢出问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中的内存溢出问题怎么解决”吧!一、内存溢出原因内存溢出就是内存不够,引起内存溢出的原因有很...
    99+
    2023-06-15
  • 用数据库生成的ID会生成什么问题
    这篇文章主要讲解了“用数据库生成的ID会生成什么问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“用数据库生成的ID会生成什么问题”吧!用数据库生成应用ID...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作