Heap Dump与Analyzer

堆转储文件中有什么呢?

每一个类有多少个对象,它们的值是什么,都可以在堆转储文件中找到。

1.heap dump

除了使用visual VM 外,还可以使用jmap命令。特别是远程机器不给你开放端口连时,只能使用原始的命令行工具。

//将pid=9406这个java进程的堆,dump到heapDump.hprof文件中。live表示只输出存活对象的信息
jmap -dump:live,format=b,file=heapDump.hprof 9406

这只二进制格式的文件,无法直接阅读。后缀hprof可以理解为Heap PROFile。

2.visual VM简单分析

图2-1 visual VM的heapDump文件分析视图

3.Memory Analyzer

eclipse的一个插件。在Eclipse Marketplace中搜索即可安装。免费,功能比visualVM强大。

图3-1 搜索并安装Memory Analyzer

安装过后,即可打开一个.hprof文件尝试一下。

图3-2 Memory Analyzer的视图

4.OQL 对象查寻语言

OQL,Object Query Language,对象查询语言。

堆转储文件中的类有上千个,像java.lang.String这样的热门类,对象可能也有数千个。如何快速地查找自己感兴趣的对象,就要用到OQL了。

visualVM中的OQL与Memory Analyzer中的OQL语法是不一致的,需要注意!!

4.1 Memory Analyzer的语法

//在String类中搜索值为"Mozilla.*"的对象。需要注意通配符为‘*’,不是sql中的'%'
select * from java.lang.String s where toString(s) like "Mozilla.*"

5.shallow size 与 retained size

Shallow size ,是该对象自己的基本类型数据的大小之和。

java的引用相当于c++的指针,因此在64位平台上,占8个字节,在32位平台上占4个字节。

Retained size,是该对象自己的shallow size加上从该对象能直接或间接访问到对象的shallow size之和。

时间: 2024-11-22 17:38:57

Heap Dump与Analyzer的相关文章

应用部署到weblogic 10.3上+jdk版本 1.6,如何设置可产生heap dump文件?

问题描述 应用部署到weblogic 10.3上+jdk版本 1.6,如何设置可产生heap dump文件? 我在weblogic的配置文件setDomainEvn.sh文件中,已经配置:-XX:+HeapDumpOnOutOfMemoryError -XX:+HeapDumpOnCtrlBreak,并且在该文件中新增: export IBM_HEAPDUMP=true export IBM_HEAP_DUMP=true export IBM_HEAPDUMP_OUTOFMEMORY=true

使用VisualVM查看Java Heap Dump

[本文转载于使用VisualVM查看Java Heap Dump] 浏览Heap Dump 可以使用VisualVM浏览heap dump文件的内容,从而快速查看在堆中分配的对象.Heap dumps在主窗口的heap dump子标签页中显示.你可以打开保存在本地的heap dump文件(.hprof)或者使用VisualVM捕获正在运行的程序的heap dumps. 一个heap dump是Java虚拟机(JVM)在某一时刻所有对象的快照.JVM从堆中为所有的类实例和数组分配内存.当一个对象不

Thread Dump与Analyzer

线程转储文件中有什么呢? 包含每一个线程的状态及调用堆栈信息. 1.thread dump  jstack pid 可以输出堆栈信息到控制台,可用重定向命令写入到文件中. 2.分析 结果为普通文本,可以直接阅读.形如: 2016-11-04 23:53:16 Full thread dump OpenJDK 64-Bit Server VM (24.95-b01 mixed mode): "JDWP Transport Listener: dt_socket" daemon prio=

jdk 编译、运行、排障组件

1.编译 javac 编译 .java源文件. javah 产生相关的 JNI header file 2.运行 java 执行 .class..jar 文件,命令行窗口运行. javaw 执行 .class..jar 文件,非命令行窗口运行. 3.监控排障 3.1 jps //输出java线程的完整启动参数 jps -mlv 3.2 jstat //每隔1000毫秒输出一次gc信息,共输出3次 jstat -gc pid 1000 3 格式大概见下: S0C S1C S0U S1U EC EU

使用Eclipse Memory Analyzer进行堆转储文件分析

简介: Eclipse Memory Analyzer(MAT)是著名的跨平台集成开发环境 Eclipse Galileo 版本的 33 个组成项目中之一,它是一个功能丰富的 JAVA 堆 转储文件分析工具,可以帮助你发现内存漏洞和减少内存消耗.本文主要介绍如 何安装配置 Memory Analyzer,并结合一个实例,介绍如何利用 MAT 来进行堆转 储文件分析,找到内存泄露的根源. 概述 对于大型 JAVA 应用程序来说,再精细的测试也难以堵住所有的漏洞,即便我 们在测试阶段进行了大量卓有成

性能分析工具之-- Eclipse Memory Analyzer tool(MAT)(一)

[本文转载于性能分析工具之-- Eclipse Memory Analyzer tool(MAT)(一)] 前言 在平时工作过程中,有时会遇到OutOfMemoryError,我们知道遇到Error一般表明程序存在着严重问题,可能是灾难性的.所以找出是什么原因造成OutOfMemoryError非常重要.现在向大家引荐Eclipse Memory Analyzer tool(MAT),来化解我们遇到的难题.如未说明,本文均使用Java 5.0 on Windows XP SP3环境.   为什么

使用Memory Analyzer tool(MAT)分析内存泄漏(二)

[本文转载于使用Memory Analyzer tool(MAT)分析内存泄漏(二)] 前言 在使用Memory Analyzer tool(MAT)分析内存泄漏(一)中,我介绍了内存泄漏的前因后果.在本文中,将介绍MAT如何根据heap dump分析泄漏根源.由于测试范例可能过于简单,很容易找出问题,但我期待借此举一反三.一开始不得不说说ClassLoader,本质上,它的工作就是把磁盘上的类文件读入内存,然后调用java.lang.ClassLoader.defineClass方法告诉系统把

如何抓取Thread Dump小结(转)

当系统性能出现问题时,需要从各个方面来查看网络环境.主机资源.查看最经变更的代码等.如果是想从代码层面解决问题,那么最有效的方法就是查看相关dump文件.如果是使用IBM JDK(我默认你是在aix环境下),那么可以使用kill -3 "进程号",这种恐吓的方式来生成dump文件.可以用IBM提供的工具jca.jar来查看Thread dump文件.利用IBM 提供的heap分析工具.javacore文件(关于cpu的)和heapdump文件(关于内存的) tips:IBM jdk1.

【原创】Erlang 之 erl_crash.dump 文件分析

      先看一下坚强兄的博文 < [Erlang 0057] Erlang 排错利器: Erlang Crash Dump Viewer > 中说了什么: 1. 基于 crashdump_viewer 的 web 页面进行查看  crashdump_viewer:start(). 补充:  The Crashdump Viewer is an HTML based tool for browsing Erlang crashdumps. Crashdump Viewer runs unde