Java Core和HeapDump

什么是Java Core和Heap Dump

Java程序运行时,有时会产生Java Core及Heap Dump文件,它一般发生于Java程序遇到致命问题的情况下。

发生致命问题后,Java进程有时可以继续运行,但有时会挂掉。

为了能够保留Java应用发生致命错误前的运行状态,JVM在死掉前产生两个文件,分别为JavaCore及HeapDump文件。

JavaCore和Heap Dump的区别

l JavaCore是关于CPU的

JavaCore文件主要保存的是Java应用各线程在某一时刻的运行的位置,即JVM执行到哪一个类、哪一个方法、哪一个行上。它是一个文本文件,打开后可以看到每一个线程的执行栈,以stack trace的显示。通过对JavaCore文件的分析可以得到应用是否“卡”在某一点上,即在某一点运行的时间太长,例如数据库查询,长期得不到响应,最终导致系统崩溃等情况。

l HeapDump文件是关于内存的。

HeapDump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况,这种文件需要相应的工具进行分析,如IBM Heap Analyzer这类工具。这类文件最重要的作用就是分析系统中是否存在内存溢出的情况。

如何生成Java Core、Heap Dump文件

这两个文件可以用手工的方式生成,当我们会遇到系统变慢或无响应的情况,这时就以采用手工的方式生成Java Core及Heap Dump文件。

在Unix/Linux上,产生这两个文件的方法如下:

# ps -ef | grep java  
user 4616 4582 0 17:30 pts/0 00:00:00 grep java  
root 5580 1 0 Oct27 ? 00:02:27 /usr/bin/java -server -XX:PermSize=64M -XX:MaxPermSize=128m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/usr/local/tomcat8090/conf/logging.properties -Djava.endorsed.dirs=/usr/local/tomcat8090/endorsed -classpath :/usr/local/tomcat8090/bin/bootstrap.jar -Dcatalina.base=/usr/local/tomcat8090 -Dcatalina.home=/usr/local/tomcat8090 -Djava.io.tmpdir=/usr/local/tomcat8090/temp org.apache.catalina.startup.Bootstrap start  
# kill -3 5580

首先,找出Java进程id ,然后再执行‘kill -3 进程号’的操作,等文件生成后再做一次同样的操作,再产生一组文件。

如何分析

Java Core

IBM Thread and Monitor Dump Analyzer for Java

功能:IBM Thread and Monitor Dump Analyzer for Java是一个可以用来分析JavaCore日志中每个线程的信息并提供诊断信息的工具。

下载地址:https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=2245aa39-fa5c-4475-b891-14c205f7333c

下载后可以获得名字类似jca457.jar的文件。jca是Java Coredump Analyzer的缩写,后面的数字是版本号。

使用方法:

jca***.jar是一个可执行的jar包。可以输入以下命令来运行。

-jar是执行jar包的参数;-Xmx用来为执行jca457的进程分配最大堆内存。

<Java Runtime Environment path>java -Xmx500m -jar jca457.jar

Heap Dump

IBM HeapAnalyzer

功能:一个用来寻找Java堆缺陷的图形化工具。

下载地址:https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091

下载后可以获得名字类似ha456.jar的文件。ha是Heap Analyzer的缩写,后面的数字是版本号。

使用方法:

jca***.jar是一个可执行的jar包。可以输入以下命令来运行。

-jar是执行jar包的参数;-Xmx用来为执行jca457的进程分配最大堆内存。

<Java Runtime Environment path>java –Xmx4g -jar ha456.jar

上面的代码为运行ha456的进程分配了4G的内存去运行。
注:由于发生HeapDump产生的文件往往比较大,进程在分析文件时需要占用大量内存。如果分配内存不够,有可能还没有分析完文件,程序就提示内存不够,从而中断分析。所以,必须保证你的机器的内存大小至少要大于Heap Dump文件。


参考

l https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=2245aa39-fa5c-4475-b891-14c205f7333c

l https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091

l http://blog.csdn.net/newhappy2008/article/details/7592697

http://www.cnblogs.com/jingmoxukong/p/5509196.html

时间: 2024-12-21 16:19:31

Java Core和HeapDump的相关文章

java core 正则 &quot;\\PL+&quot;的意义

java core第十版中的第一章中出现了一个正则"\\PL+",根据注释(Split into words:noletters are delimiters)提示,这个正则的意思应该就是以非字母分隔符; ------------------------------------------- 在查找这个正则表达式的意思时,发现一个表(引自百度百科): 由此表,"\\PL+"正则还可以派生以下格式: "\\PN+" 非数字; "\\PZ+

记一次Java Core Dump分析过程

#背景提要 很久没有亲自动手部署代码了,命令行的亲切感越来越低.放飞了键盘,习惯了鼠标操作的windows环境.冷不丁实操部署也是不错的. 常常在部署时,运维同学对于[hs_err_pid]文件视而不见.殊不知这是Java 虚拟机崩溃日志. #这次是如何分析问题的? 一.首先查看日志头文件 # # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x00007f90e

Java Core 学习笔记——3.char/Unicode/代码点/代码单元

通用字符集(UCS) UCS是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所制定的标准字符集. UCS包括了其他所有的字符集(包含了已知语言的所以字符). ISO/IEC 10646定义了一个31位的字符集(首位恒定为0,占用4字节). Unicode(万国码.国际码.统一码.单一码) 编码方式: Unicode编码空间从“U+0000”到“U+10FFFF”(共1112064个码位),Unicode的编码空间划为17个平面,每个平面包含216(65536)个码位.17

java core

1:  Java7 以后的 NIO. 2:  泛型要掌握,这里重点强调一点,泛型类之间不存在继承关系,所有的泛型对象在编译后都会去泛型化,都是同一个 class 对象,例如 ArrayList<Objcet>不是 ArrayList<String>的父类,在内存中对应同一个 class.还有在 Java7以后,支持新的写法,例如,List<String> names = new ArrayList<>(). 3:  知道枚举对象,枚举类型可以用在 switc

Java Core - Map接口

Map:The java.util.Map interface represents a mapping between a key and a value. The Map interface is not a subtype(子类型) of the Collectioninterface.Therefore it behaves a bit different from the rest of the collection types.java.util.Map接口表示键和值之间的映射. M

Java Core - ‘==’和‘equals’的区别

不管是‘==’还是‘equals’,他们的比较都需要区分类型来讨论的: ‘==’ 当比较的数据类型是基本类型时,比较值是否相同 当比较的数据类型是引用类型时,不仅比较值相同还比较其所在内存地址是否相同,也就是引用是否相同. 分析:String不是一个基本类型,它和Integer一样是一个类.由于strC是我们创建并实例化了一个String对象,java虚拟机在heap(堆)里为strC重新开辟了一块空间,因此它和strA.strB的引用是不一样的,所谓引用就是该变量在堆中的起始地址. ‘equa

Java Core - static关键字的理解

一.基本常识 二.关于main方法 我们最常见的static方法就是main方法,至于为什么main方法必须是static的,现在就很清楚了.因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问. 三.学习通道 https://www.cnblogs.com/dolphin0520/p/3799052.html https://www.cnblogs.com/dolphin0520/p/10651845.html 原文地址:https://www.cnblogs.com/2s

Java core 基础知识整理

x内部类 x.1 成员内部类 x.2 局部内部类 x.3 静态内部类 x.4 匿名内部类 为什么匿名内部类访问的外部类成员变量或成员方法必须用static修饰?以匿名内部类方式,可以说接口可以被new吗?在什么情况下使用匿名内部类? 原文地址:https://www.cnblogs.com/liwe/p/10987853.html

深入JVM系列之(3):JavaCore和HeapDump

jvm 生成javacore和heapdump文件 在Server端开发与运维中,经常需要生成javacore和heapdump文件,以便分析jvm的运行状态.javacore文件中给出jvm线程的详细情况,而heapdump文件则给出jvm的运行时内存的使用情况,对分析JVM的内存泄漏有重要的作用.其中,javacore文件一般是文本文件,而heapdump则一般是二进制文件,需要使用专门的分析工具进行分析,一般常用的工具为IBM的heap anylizer. JavaCore是关于CPU的,