BESAppServer中JavaDump分析
2016-05-05 14:32
465 查看
1.1. Java dump概述
JavaDump即Java虚拟机的运行时快照。制作和分析dump时,常常将当时Java虚拟机运行时的状态和信息保存到dump文件。dump分类:
线程Dump,包含JVM进程中所有线程的运行状态。纯文本格式。
堆Dump,包含线程Dump以及所有堆对象的状态。二进制格式。
1.2. 制作和分析Dump
1.2.1. 常见Java虚拟机
不同Java虚拟机的Dump规范不完全相同。线程dunp为纯文本格式,各虚拟机略有不同。Java虚拟机类型 | 说明 |
HotSpot VM | 原Sun的Java虚拟机实现。堆dump为HPROF二进制格式。 |
IBM J9 VM | IBM的Java虚拟机,常见于IBM的AIX等机器。堆dump为PHD二进制格式。 |
OpenJDK | 开源版本的Java虚拟机实现,与HotSpot VM实现大部分相同。堆dump为HPROF二进制格式。 |
JRockit | 原BEA的Java虚拟机实现。堆dump为HPROF二进制格式。 |
HP JDK | HP服务器上的Java虚拟机实现。堆dump为HPROF二进制格式。 |
IBMPortable Heap Dump (PHD): 这个专有的 IBM 格式只包含进程中每个 Java 对象的类型和大小,以及这些对象之间的关系。这个转储文件格式远远小于其他格式,并且只包含最少的信息。但是,这些数据通常对于分析内存泄漏和了解应用程序基本架构和范围而言是足够的。
HPROF二进制转储文件: HPROF二进制转储文件在 IBMPHD 格式中包含了所有数据表现方式,以及 Java 对象和线程内部的基本数据类型,您可以查看对象中域的值,查看在转储文件产生时有哪些方法在被执行。其他基本数据使 HPROF 转储文件明显比 PHD 格式的转储文件要大;它们大约与所使用的 Java 堆一样大。
1.2.2. 制作Java Dump
在不同的操作系统平台、不同的Java虚拟机环境下,使用图形化或命令行工具,生成指定Java进程的Dump并保存到文件。使用JDK自带工具,连接BES实例,制作dump
HotSpot 运行时环境:
基于 HotSpot 的 Java 运行时只能够生成 HPROF 格式的转储文件。
可以先通过ps/jps:查看本机的Java中进程信息。然后使用jstack打印线程的栈信息,制作线程Dump。
知识点: Solaris 下/usr/bin/ps会截短进程名称,很多时候没法知道完整的进程名称,很不方便。而/usr/ucb/ps有参数可以显示全名: /usr/ucb/ps -auxww |grep java |
制作heap dump有以下几种方法:
方法 | 使用说明 |
Jmap工具 | jmap位于 JDK 的 bin 目录,它提供了一种从运行中的进程请求一个 HPROF 转储文件的选项。在 Java 5 中,要使用: jmap -dump:format=b pid 而在 Java 6 中,要使用以下命令,其中 live 是可选的,表示只返回正在写到转储文件进程 ID (PID) 的 “live” 对象: jmap -dump[live,]format=b,file=filename pid |
Jconsole工具 | dumpHeap 操作是基于 JConsole 的 HotSpotDiagnostic MBean 提供的。这个操作要求必须生成一个 HPROF Dump。 |
JVM事件 | 遇到 OutOfMemoryError 时: 如果运行中应用程序设置了 -XX:+HeapDumpOnOutOfMemoryError 命令行选项,那么当出现OutOfMemoryError 错误时就会有一个 HPROF 格式的转储文件生成。在生产系统中使用这种方法非常好,因为它几乎一直需要分析内存问题,并且它不会引起额外的性能开销。在旧版本的基于 HotSpot 的 Java 运行时中,每次 JVM 执行时这个事件所产生的堆转储文件数量并没有限制;而在新的版本中,每次 JVM 执行的事件所生成的堆转储文件具有一个最大值。 |
制作thread dump:
jstack主要用来查看某个Java进程内的线程堆栈信息。语法格式如下:
Usage: jstack [-l] <pid> (to connect to running process) jstack -F [-m] [-l] <pid> (to connect to a hung process) jstack [-m] [-l] <executable> <core> (to connect to a core file) jstack [-m] [-l] [server_id@]<remote server IP or hostname> (to connect to a remote debug server) Options: -F to force a thread dump. Use when jstack <pid> does not respond (process is hung) -m to print both java and native frames (mixed mode) -l long listing. Prints additional information about locks -h or -help to print this help message
相关文章推荐
- javacore文件及heapdump文件分析
- IBM WAS 宕机情况的分析
- Oracle memory troubleshooting, Part 1: Heapdump Analyzer
- javacore-heapdump分析示例
- nodejs 内存泄漏
- heapdump分析简单总结
- java.lang.OutOfMemoryError:GC overhead limit exceeded
- 关于"app:transformClassesWithDexForDebug"报错的问题解决
- ThreadDump的使用及分析
- tomcat 产生heapdump文件配置
- iOS 视图高斯模糊(毛玻璃)效果实现
- JavaScript中的call()和apply()方法
- Android实现多线程断点下载
- Android Volley 框架的使用
- 狗脸识别APP整合
- iOS开发------手动约束布局出现NSAutoresizingMaskLayoutConstraint冲突(解决)
- Android Studio 插件(plugins)或者intellij idea 插件(plugins)无法安装
- Objective-c 创建单例
- Android Studio 版本控制中建议过滤的文件(转)
- ubuntu上android源码摘取与编译