文档结构  
可译网翻译有奖活动正在进行中,查看详情 现在前往 注册?
原作者:Siva Prasad Rao Janapati (2016-09-16)    来源:Dzone [英文]
coyee    计算机    2016-09-17    1评/948阅
翻译进度:已翻译   参与翻译: lison (3)

在本文中,我们将看到如何获取Java堆数据用来解决内存溢出或者内存高占用情况。获取堆数据有多种不同的方式,这些方式依据JVM版本的不同也会不是相同的 本文中,我使用Oracle JDK8.

当应用程序抛出“OutOfMemoryError”异常时自动生成堆数据

要自动生成堆数据,当应用程序抛出 “OutOfMemoryError“异常时,我们需要给JVM传递下面的参数用来生成堆数据文件。然后JVM会在指定路径生成堆数据文件.

第 1 段(可获 1.18 积分)
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<path to this heap dump file>

有时候我们需要按需生成堆数据。比如, 在高负载时,应用程序会变得很慢而且内存消耗显著增加时。为了解决内存消耗问题,我们需要拿到堆数据进行分析。如果你没有指定堆数据生成路径, 那么JVM会将文件生成在JAVA进程运行的地方。生成的堆数据文件名就像这样 java_pid.hprof.

手动生成堆数据

从JDK6开始, 我们可以使用 jmap 工具用来按需生成堆数据. JMAP将二进制格式的HPROF Java堆数据存储到指定的文件. 下面是使用方法.

第 2 段(可获 1.36 积分)
jmap -dump:format=b,file=<file_name> <pid>
For example, jmap -dump:format=b,file=heap_dump.hprof 4988

上面的例子中,4988是用来获取堆数据的Java进程id. 可以使用 jps (Java虚拟机进程状态工具)工具来获取进程id。

也可以使用另一个图形化的工具 jconsole. jconsole 可以连接本地或远程的Java进程。然后使用MBeans 获取堆数据.

还可以使用 jvisualvm 图形化工具用来连接本地或远程Java进程. 使用 jvisualvm 也可以生成堆数据.

这些工具都包含在JDK中。设置  JAVA_HOME 和 PATH 环境变量就可以使用他们.

下一篇文章中, 我们将使用工具分析堆数据用以检测内存问题。敬请期待!!! 

第 3 段(可获 1.59 积分)

文章评论

吉G过期罐头
感谢