生成jvm快照文件

原文:https://blog.csdn.net/jijianshuai/article/details/79128033

 -Xmx20m -Xms5m -XX:HeapDumpOnOutofMemoryError -XX:HeapDumpPath=d:/a.dump
分配了20M最大空间 ,启动 最小空间5M , 发生了 内存溢出错误 dump路径为a.dump

Heap Dump 概述
  Heap Dump 是 Java进程所使用的内存情况在某一时间的一次快照。以文件的形式持久化到磁盘中。
Heap Dump的格式有很多种,而且不同的格式包含的信息也可能不一样。但总的来说,Heap Dump一般都包含了一个堆中的Java Objects, Class等基本信息。同时,当你在执行一个转储操作时,往往会触发一次GC,所以你转储得到的文件里包含的信息通常是有效的内容(包含比较少,或没有垃圾对象了) 。

Heap Dump 包含的信息
     >>.所有的对象信息
     >>.对象的类信息、字段信息、原生值(int, long等)及引用值
  >>.所有的类信息
  >>.类加载器、类名、超类及静态字段
  >>.垃圾回收的根对象
  >>.根对象是指那些可以直接被虚拟机触及的对象
  >>.线程栈及局部变量
  >>.包含了转储时刻的线程调用栈信息和栈帧中的局部变量信息
Heap Dump 获取方式
1. 使用 jmap 命令生成 dump 文件
      jmap -dump:live,format=b,file=d:\dump\heap.hprof <pid>

2. 使用 jcmd 命令生成 dump 文件
     jcmd <pid> GC.heap_dump d:\dump\heap.hprof

3. 使用 JVM 参数获取 dump 文件
  1. -XX:+HeapDumpOnOutOfMemoryError
    当OutOfMemoryError发生时自动生成 Heap Dump 文件。

    这可是一个非常有用的参数,因为当你需要分析Java内存使用情况时,往往是在OOM(OutOfMemoryError)发生时。

  2. -XX:+HeapDumpBeforeFullGC
    当 JVM 执行 FullGC 前执行 dump。

  3. -XX:+HeapDumpAfterFullGC
    当 JVM 执行 FullGC 后执行 dump。

  4. -XX:+HeapDumpOnCtrlBreak
    交互式获取dump。在控制台按下快捷键Ctrl + Break时,JVM就会转存一下堆快照。

  5. -XX:HeapDumpPath=d:\test.hprof
    指定 dump 文件存储路径。

    注意:JVM 生成 Heap Dump 的时候,虚拟机是暂停一切服务的。如果是线上系统执行 Heap Dump 时需要注意。

4. 使用其它工具获取dump文件
分析 Heap Dump 的工具都可以获取 Heap Dump 文件。
比如:jdk 自带的工具 jvisualvm。
其它工具:Eclipse memory analyzer(jmat)、JProfiler 等。

原文地址:https://www.cnblogs.com/But-you/p/10431467.html

时间: 2024-10-25 11:07:20

生成jvm快照文件的相关文章

[Android]生成heap dump文件(.hprof)

Android生成heap dump文件(.hprof) 一个heap dump就是一个程序heap的快照,可以获知程序的哪些部分正在使用大部分的内存. 它保存为一种叫做HPROF的二进制格式.对于Android执行android.os.Debug.dumpHprofData(hprofPath)方法后所生成的文件,需要把.hprof文件从Dalvik格式转换成J2SE HPROF格式.使用AndroidSDK提供的hprof-conv工具可执行该转换操作. hprof-conv dump.hp

Android gen根目录下自动生成的R文件指向问题

今天才弄明白,原来在调用vitamio包的时候使用它们的R文件,然后在迁入广告的时候出现了问题,但是瞎胡搞半天后把问题解决了,可没有明白这是什么原因. 今天更新应用又出现了相同的情况,无意中打开了gen的根目录妈蛋!发现里面的报名根本就不是我现在应用的包名.而是调用的那个工程的包名!这下终于找到根本原因了,但是怎么解决呢???----------->修改包名呗~~~~~~~可是你改了它又会自动生成了原来的那个,--------------后来终于发现原来这个R文件的包名适合manifest文件中

文件分割器,一个读取流,相应多个输出流,并且生成的碎片文件都有有序的编号

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Properties; public class FileSpilte { /** * @param args * @throws IOException */

VHDL生成的ngc文件被verilog的工程调用的问题

1. 问题的提出 工程a是一个soft core,用VHDL写的,综合的时候去掉了"Add I/O buffers" ,并将-iob(Pack I/O Registers into IOBs)置为否.综合最后生成了a.ngc文件供其他工程使用.在生成完ngc后,还可以在 "Design Utilities" -> "View HDL Instantiation Template" 中生成相应的调用文件. 工程b调用的a.ngc,但是工程b使

【转】Android NDK学习(3)使用Javah命令生成JNI头文件 .

第一步: 在Eclipse中创建android项目,并声明Native接口: public native int add (int a, int b);public native int sub (int a, int b); 编译.运行: 这样在bin目录下就会生成类文件: 第二步: 打开命令行cmd,到达bin目录: F:\fww\workspace\TestJNI\bin> 输入如下命令: F:\fww\workspace\TestJNI\bin>javah -d header -cla

win7 安装oracle 10g 未生成监听文件 导致配置监听时无法保存

最近这两天一直在为安装 的oracle 配置监听无法保存 再找各种解决方案,最后自己居然自己配置出来了. 因为缺少监听文件,拷贝别人的放到自己的目录下C:\oracle\product\10.2.0\client_1\NETWORK\ADMIN   listener.ora.tnsnames.ora和 sqlnet.ora 1.修改 tnsnames.ora  中的 # tnsnames.ora Network Configuration File:  c:\oracle\product\10.

用T4生成多个文件(转)

初次认识并尝试使用T4生成代码的时候,相关学习资料似乎比较少.不过现在VS2010 的MSDN里已有相关章节,可参看<代码生成和文本模板>章节.可以用C#的语法写模板,实在舒服很多. 很快就发现T4难以生成多个文件的缺陷,微软似乎也不着急改进这一点.通过搜索,从InfoQ找到一篇文章<用T4生成多个文件>,链接到一篇文章,Damien Guard的扩展可以方便的生成多个文件.原文是英文,能看懂,然而如果翻译则斟酌字词太辛苦. 首先,保存以下代码为一个模板文件(例如保存文件名为Man

基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这样给我们扩展使用有很多的不方便.基于这个原因,我想如果能够独立一个模块,自动根据图标生成图标CSS样式文件,并存储相应的记录到数据库里面,方便我们查询显示,那样我们使用起来就很方便了,最后有了这些数据,只需要做一个通用的图标选择界面,并可以在很多地方重用了.本文正是基于这个思路,开发了一个图标管理模

C++调用C#生成的DLL文件的各种问题

C++调用C#生成的DLL文件: 首先选择建立一个C#的类库,然后再按照需求编写需要的函数 之后,对于C++调用过程需要注意的几点: 1.使用#using <....some.dll>指出DLL文件的位置来调用DLL 2.using namespace some 方便之后调用函数 3.Class1 ^c = gcnew Class1(); gcnew和new的区别(引自百度知道): gcnew返回的是一个句柄(Handle),而new返回的是实际的内存地址. gcnew创建的对象由虚拟机托管,