`

转:使用JRockit作为工具检测并解决JAVA内存泄漏问题的一次实战

    博客分类:
  • java
 
阅读更多

使用JRockit作为工具检测并解决JAVA内存泄漏问题的一次实战.doc

1. JRockit简介
Jrockit是Bea开发的符合JAVA虚拟机规范的虚拟机+虚拟机监控软件。
虚拟机:Jrockit Real Time
监控软件:Jrockit Mission Control
Jrockit Real Time与SUN的JDK是完全兼容的,也就是说以前在SUN的虚拟机上跑的程序,在Jrockit Real Time上不会出现任何问题。
以前这套软件只提供1个小时的免费监控时间。就是说虚拟机启动1个小时内监控软件可以连上,过了一个小时就连不上了。这对一天才泄漏20M的应用程序来说,没有什么意义。现在已经完全免费了。这是开发者的福音。
最重要的,Jrockit是目前作者尝试过的,唯一一套可以在生产环境中进行内存监控的软件,其他软件都会严重降低虚拟机的效率应用基本无法使用。因为内存泄漏有时就算在压力测试中也很难发现。大部分都是在生产环境中产生的。如果没有一个基本不影响运行效率的软件,想解决只能靠运气。以前我解决过一次JAVA内存泄漏的问题,将程序从WEBLOGIC迁移到TOMCAT上解决了决完全属于运气。现在有了这个工具,解决起来就非常方便了。
2. 下载JRockit3.1.0,并安装
下载地址:http://www.oracle.com/technology/software/products/jrockit/index.html
要同时下载Jrockit Mission Control 3.1.0(监控软件)和Jrockit Real Time 3.1.0(虚拟机)
3. 服务器端配置
1. 在服务器段安装Jrockit Real Time 3.1.0,
2. 设置应用程序,使用此Jrockit启动应用程序。
Tomcat 6的设置方法是:
在catalina.sh顶部加入
JAVA_OPTS=" -verbosegc -Dcom.sun.management.jmxremote.port=7091 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=本机IP "和
JRE_HOME="Jrockit虚拟机路径"
将JRE_HOME改为JAVA_HOME也行。
3. 下载http://download2.bea.com/pub/license/All%20Products/BEA_WebLogic.zip,解压后将其中的LIC-WLRT20.txt文件改名为license.bea上传到%JROCKIT_HOME%/jre/下。
4. 监控端设置
首先安装Jrockit Mission Control 3.1.0,然后运行之。
在JVM浏览器视图中,对连接器文件夹右键,选择新建连接。弹出下图:


在“主机”处输入IP,服务器开放的端口已经是7091,所以不必修改。其他的不用动。点击“测试连接”状态如果是确定则代表已经连接。点击Finish保存新建的连接。在“连接器”文件夹新建了一个连接。
5. 开始监控内存
在新建的连接器上点击右键,选择“启动Memleak”,如图:
IMG

弹出内存泄露检测器,如图:
IMG

最先看见的是“趋势”选项卡,里边标注了占用JAVA堆大于0.1%的类和数组。
“类型”选项卡,显示了类型与类型之间的引用情况。
“实例”选项卡,显示了实例之间的引用情况。
“分配堆栈跟踪”选项卡,显示了指定类型在虚拟机运行过程中被使用的情况。
6. 实战
公司的一个JAVA应用系统上线以来,基本每1天OutOfMemory一次。JAVA堆上限1个G。
6.1 10点45分内存使用情况抓屏(趋势选项卡)
注:抓屏前都进行了完全的垃圾回收。
IMG

6.2 13点17分内存使用情况抓屏

IMG

6.3 结论
占用内存最高的类为:
edu.emory.mathcs.java.util.concurrent.ConcurrentHashMap$Segment
此类从10点多的95M涨到13点的129M。没有释放内存。此类引起内存泄露。
edu.emory.mathcs属于backport-util-concurrent开源项目。用于线程并发编程。属于java.util.concurrent包的另一个实现。
7. 堆栈分配跟踪
知道是那个类出了问题,然后就需要知道系统中都那些类使用了这个问题。在edu.emory.mathcs.java.util.concurrent.ConcurrentHashMap$Segment上右键,选择“显示分配跟踪”,进入“分配堆栈跟踪”选项卡,
跟踪一段时间如图:
IMG

此时就会发现,使用backport-util-concurrent的是AXIS2,使用AXIS2的是我们项目里的文件,并且里边已经标注了堆栈(包名.类名.方法名(文件名:行数) ),这样就知道那里出现问题,对症下药就能够解决了。去修改代码吧。HOHO~

分享到:
评论

相关推荐

    内存泄露检测工具

    KCachegrind 工具可以帮助开发者分析程序中的性能问题,并检测内存泄漏问题。 9. Leak Monitor:是一个 Firefox 扩展,用于检测 Firefox 相关的内存泄漏问题。 Leak Monitor 工具可以检测 Firefox 中的内存泄漏...

    JRockit JAVA内存溢出检测的使用(CHM)

    **JRockit JAVA内存溢出检测的使用** Java内存溢出是开发和运行Java应用程序时常见的问题,可能导致程序崩溃或性能急剧下降。JRockit JVM(Java Virtual Machine)由Oracle公司开发,它提供了强大的内存管理和分析...

    图书:Oracle JRockit权威指南

    4. **JRockit诊断工具**:介绍JRockit Mission Control等诊断工具的使用,包括性能监控、内存泄漏检测、线程分析等功能,帮助开发者快速定位和解决问题。 5. **JRockit性能调优**:提供实战性的性能调优技巧,包括...

    自己写的JRockit教程(LINUX下)检测JAVA内存泄漏CHM

    本教程提供在linux上用JRockit启动JAVA程序、在windows上启动JRockit检测内存泄漏的方法(远程连接),分为以下步骤:获得 JRockit、安装JRockit、指定LINUX要使用的JDK、修改JAVA程序启动参数、运行JRockit

    jrockit 手册

    Java开发人员在面对复杂的应用系统时,经常遇到性能优化的问题,而Oracle JRockit JVM作为一款高效的Java虚拟机,尤其在内存管理和垃圾回收方面表现出色。"jrockit手册"是一份宝贵的资源,旨在帮助开发者深入理解...

    JRockit Mission Control介绍及配置

    JRockit Mission Control 是 BEA(现已被 Oracle 收购)推出的一款强大的 Java 应用性能管理和诊断工具,特别适用于检测和解决内存泄漏问题。这个工具集在 JRockit R26.0.0 及后续版本中捆绑提供,最新版本为 2.0.1...

    JRockit (jrockit-jdk1.6.0_45-R28.2.7-4.1.0-windows-x64.exe)

    Oracle JRockit是一款高性能、优化过的Java虚拟机(JVM),专为服务器端应用程序设计,尤其是在需要高吞吐量和低延迟的环境中表现卓越。它曾经是Oracle公司的一个重要产品,但现在已被Java HotSpot VM所取代,后者是...

    Oracle JRockit_The Definitive Guide

    - **故障诊断**:书中还覆盖了如何使用JRockit进行故障诊断,包括内存泄漏分析、死锁检测等高级话题。 - **扩展性**:探讨了JRockit如何支持水平扩展,包括集群技术和负载均衡策略。 #### 实践案例分析 本书不仅...

    Oracle JRockit

    - **内存管理**:JRockit具有先进的内存分析工具,可以帮助开发者定位内存泄漏和优化内存使用。 - **诊断和监控**:提供强大的JMX(Java Management Extensions)支持,方便进行实时性能监控和问题排查。 - **低...

    JRockit (jrockit-jdk1.6.0_45-R28.2.7-4.1.0-linux-x64.bin)

    Oracle JRockit是一款高性能、优化过的Java虚拟机(JVM),尤其在服务器端应用和大规模分布式环境中表现出色。它由Oracle公司开发,是Java应用程序的关键组成部分,负责运行和管理Java代码。标题中的"jrockit-jdk...

    jrockit帮助文档

    - **JRockit Memory Leak Detector**:检测和定位内存泄漏,保持系统健康运行。 4. **E15289_01文档详解** "E15289_01"很可能指的是JRockit的帮助文档部分,它通常会包含JRockit的详细使用指南、配置参数解析、...

    jrockit-jdk1.6.0_181-windows

    4. **故障排查和诊断**:JRockit Mission Control还包括一系列诊断工具,如性能分析器、内存泄漏检测器等,帮助开发者和运维人员快速定位和解决问题。 5. **线程和同步优化**:JRockit对线程管理和同步进行了优化,...

    jrockit1.6

    3. **内存分析和诊断**:JRockit提供了强大的内存诊断工具,如JRockit Mission Control,可以深入分析内存使用情况,帮助开发者找出内存泄漏等问题。 4. **性能监控**:JRockit包含了一套全面的性能监控和调优工具...

    could not create the java virtual machine 解决办法

    如果问题依然存在,建议进一步检查系统日志或使用性能分析工具(如VisualVM)来诊断具体的内存使用情况,从而找到更深层次的原因并采取相应的措施。 总之,“could not create the java virtual machine”这一错误...

    Packtpub.Oracle.JRockit.The.Definitive.Guide.Jun.2010.rar

    9. **问题排查与故障诊断**:学习如何使用JRockit提供的日志、堆转储和线程转储等工具来定位和解决运行时问题。 10. **实时系统优化**:对于那些对延迟有苛刻要求的实时系统,书中会介绍JRockit如何提供低延迟特性...

    JRockit (jrockit-jdk1.6.0_45-R28.2.7-4.1.0-windows-ia32.exe)

    Oracle JRockit是一款由Oracle公司开发的高性能Java虚拟机(JVM),专为优化服务器端应用程序而设计。在本压缩包文件"jrockit-jdk1.6.0_45-R28.2.7-4.1.0-windows-ia32.exe"中,我们看到的是JRockit JVM的一个特定...

Global site tag (gtag.js) - Google Analytics