- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JavaDump分析
Java Dump概述
Dump,即“转储”。Java Dump可以保留Java虚拟机的瞬时快照。相比于传统的控制台输出,提供了更多的信息用于分析运行系统状态及错误。可弥补传统在Java平台上分析Bug手段的一些不足。
Java Dump分为两种:
线程Dump:纯文本格式。包含所有线程的运行状态、调用栈、锁信息等。
堆Dump:二进制格式,需要工具查看。包含了线程Dump的所有信息,此外还包括系统信息、Java虚拟机参数以及堆对象的状态。
Java Dump的分析,特别适合于生产环境下,并且针对非功能性的问题,主要为:多线程并发、内存泄漏。
制作Dump
Java虚拟机发行版
不同Java虚拟机的Dump规范不完全相同,所以在制作Dump时,需要注意虚拟机发行版。
HotSpot VM:原Sun提供的官方Java虚拟机,支持Linux、Windows、Solaris平台。
OpenJDK:Sun JDK的开源版本,1.6后跟HotSpot差别不太大了。
JRockit:WebLogic使用的Java虚拟机,BEA开发。
IBM J9 VM:IBM开发的Java虚拟机,AIX平台上的唯一实现。
原理
注意事项
Java虚拟机发行版
使用相同的Java虚拟机发行版。即意味着使用SunJDK的工具,连接SunJRE的应用系统来制作Dump。
版本要求
目标虚拟机必须为1.6或以及的jdk。使用OOM参数制作堆Dump可使用1.5的jdk。(各虚拟机差异较大)
制作工具需要使用相同发行版的jdk,并且建议1.6以上。
堆Dump格式
相对纯文本的线程dump而言,堆Dump目前存在多种不同的格式。
HPROF,Sun 的Java虚拟机的堆Dump格式。
PHD,IBM Portable Heap Dump。IBM J9 VM生成的Dump格式。
使用虚拟机参数
内存溢出时自动堆Dump
为虚拟机增加启动参数:
-XX:+HeapDumpOnOutOfMemoryError
则当虚拟机发生OutOfMemoryError时,自动生成堆Dump。
该参数对生产环境是否有用,可保存崩溃的现场,分析内存泄漏等。
使用图形工具
Java VisualVM
Java VisualVM是从SunJDK_1.6开始自带的图形化工具,集成了jps、jmap、jstat等多个实用工具。在Windows环境下,推荐使用该工具制作线程Dump及堆Dump。此外,该工具还可做简单的内存分析。
Java VisualVM位于JDK的bin目录下,界面如下:
窗口左边为本机的Java进程,选择需要制作Dump的Java进程,点击右键选择“线程Dump”或“堆Dump”制作相应的Dump。
生成的Dump位于进程节点下,需要选择并另存到文件才能持久化保存。
Java VisualVM也支持从远程制作Dump,但由于涉及到较为复杂的权限配置操作,故强烈不推荐使用,在此不详述。建议从本地使用Java VisualVM来连接虚拟机。
Memory Analyzer (mat)
Memory Analyzer是Eclipse基金会开发的Java堆Dump分析工具,也支持制作堆Dump。其界面如下:
点击File-Acquire Heap Dump可制作堆Dump。
首先需要选择在本机运行的目标Java进程。
通过Configure菜单,MAT还可以制作其他格式的堆Dump。
JProfiler
使用JProfiler连接上Java虚拟机后,使用Save HPROF snapshot来制作堆Dump。
示例:
使用命令行
以下介绍针对SunJDK——即HotSpotVM。
使用命令行制作Dump,建议严格按照以下四步骤。
检查Java版本
使用java –version命令。
windows平台示例:
C:\java -version
java version 1.6.0_24
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)
Linux平台示例,注意bin目录中的Java版本。
[dev@localhost bin]$ java -version
java version 1.6.0_22
OpenJDK Runtime Environment (IcedTea6 1.10.6) (rhel-0.6.el6_2-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
[d
文档评论(0)