首页 > 编程语言 >Java Core和HeapDump

Java Core和HeapDump

时间:2023-01-03 21:32:25浏览次数:62  
标签:Core Java Dump 文件 jar HeapDump usr Heap

什么是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​




标签:Core,Java,Dump,文件,jar,HeapDump,usr,Heap
From: https://blog.51cto.com/u_15147537/5986823

相关文章

  • java.text.MessageFormat 专题
     java.text.MessageFormat类MessageFormat提供一种语言无关的方式来组装消息,它允许你在运行时刻用指定的参数来替换掉消息字符串中的一部分。你可以为MessageFormat定义一......
  • Java求值策略
    为什么说Java不存在引用传递?在Java语言中,存在两种数据类型,一种是基本类型,如int、byte等8种基本类型,一种是引用类型,如String、Integer等。这两种数据类型区别就在于,基本类......
  • 第二十章《Java Swing》第3节:布局管理器
    ​当把组件添加到窗体上时,并不是直接把组件添加到JFrame对象上的,而是需要先获得窗体的内容面板,然后把组件添加到内容面板上。获得内容面板的方式是调用窗体的getContentPane......
  • 黑马程序员Javaweb综合案例错误总结整理
    案例整理(呕心沥血的教训)其他的我大部分还是不知道那里出了问了,我这个新建的项目must3终于成功了那个品牌名称和企业名称没有,是要在BrandMapper里加注解@ResultMap......
  • 第二十章《Java Swing》第4节:事件处理与监听器
    ​当程序员向窗体上添加了按钮等组件之后就能够操作这些组件,但在20.3小节的各个案例中,虽然在窗体上添加了一些按钮,但点击这些按钮并没有任何反应,因此这些按钮也就成了毫无意......
  • JavaScript条件语句
    JavaScript条件语句之break1<!DOCTYPEhtml>2<html>3<head>4<metacharset="utf-8">5<title>JavaScriptbreak语句啊</title>6......
  • Java【使用HashMap类实例化一个Map类型的对象】
    题目:使用HashMap类实例化一个Map类型的对象m1,键(String类型)和值(int型)分别用于存储员工的姓名和工资,存入数据如下:张三——800元;李四——1500元;王五——3000元;将张三的工......
  • Java线程同步总结
    线程同步的关键是保证临界资源访问的原子性和可见性。一般的解决方案是使用volatile(保证可见性、不一定保证原子性)修饰共享变量,或是加锁(直接保证原子性和可见性)进行线程同......
  • Java【封装一个新闻类,包含标题和内容属性】
    题目:1、封装一个新闻类,包含标题和内容属性,提供get、set方法,重写toString方法,打印对象时只打印标题;(10分)2、只提供一个带参数的构造器,实例化对象时,只初始化标题;并且实例化......
  • JavaScript 的数据是如何回收的
    因为数据是存储在栈和堆两种内存空间中的,所以接下来我们就来分别介绍“栈中的垃圾数据”和“堆中的垃圾数据”是如何回收的。调用栈中的数据是如何回收的当一个函数执行......