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~
相关推荐
本教程提供在linux上用JRockit启动JAVA程序、在windows上启动JRockit检测内存泄漏的方法(远程连接),分为以下步骤:获得 JRockit、安装JRockit、指定LINUX要使用的JDK、修改JAVA程序启动参数、运行JRockit
NULL 博文链接:https://stride.iteye.com/blog/723340
jrockit使用心得手把手叫你解决内存溢出
NULL 博文链接:https://jianshi-dlw.iteye.com/blog/1179715
jrockit Mission Control指南,Jrockit用于分析Java运行内存泄露的问题
第4讲 jvm初体验-内存溢出问题的分析与解决 免费 00:17:59 第5讲 jvm再体验-jvm可视化监控工具 免费 00:21:17 第6讲 杂谈 免费 00:12:37 第7讲 Java的发展历史 00:27:24 第8讲 Java的发展历史续 00:...
第4节jvm初体验-内存溢出问题的分析与解决 [免费观看] 00:17:59分钟 | 第5节jvm再体验-jvm可视化监控工具 [免费观看] 00:21:17分钟 | 第6节杂谈 [免费观看] 00:12:37分钟 | 第7节Java的发展历史00:27:24分钟 | ...
该文档是著名大师Staffan Larsen写的,他是JRockit项目的工程师之一,这个项目是在1998年底他与别人联合创建的。java虚拟机和垃圾回收机制管理着大部分的内存事务,但是在java软件中还是可能存在内存泄漏的情况。该...
本书介绍jrockit实现,是深入理解jrockit必备工具书
是对Jrockit终极指导,读者应该是有经验的java程序员,想更深入理解jvm,那么这本书就是正确,因为这本书是jvm终极指导。。。 这是原书的话This book is for anyone with a working knowledge of Java, such as ...
JRockit(6)
Oracle JRockit Mission Control 4.0.1
JRockit 6 windows JRockit 最新版本。
4.2.4 jmap:Java内存映像工具 4.2.5 jhat:虚拟机堆转储快照分析工具 4.2.6 jstack:Java堆栈跟踪工具 4.2.7 HSDIS:JIT生成代码反汇编 4.3 JDK的可视化工具 4.3.1 JConsole:Java监视与管理控制台 4.3.2 ...
Oracle JRockit (jrockit-jdk1.6.0_45-R28.2.7-4.1.0-windows-ia32.exe)适用于Windows x86系统
Oracle JRockit Mission Control 4.0.1
JRockit 6 windows 最新版本
非常棒的java反编译工具,有如下特点: 1、不依赖于JRE环境 2、支持如下jdk编译器 * jdk1.1.8 * jdk1.3.1 * jdk1.4.2 * jdk1.5.0 * jdk1.6.0 * jikes-1.22 * harmony-jdk-r533500 * Eclipse Java Compiler v...
Oracle JRockit Mission Control 4.0.1