使用JRockit检测并解决JAVA内存泄漏问题
2012-12-19 23:42
447 查看
1. JRockit简介
Jrockit是Bea开发的符合JAVA虚拟机规范的虚拟机+虚拟机监控软件。
虚拟机:Jrockit Real Time
监控软件:Jrockit Mission Control
Jrockit Real Time与SUN的JDK是完全兼容的,也就是说以前在SUN的虚拟机上跑的程序,在Jrockit Real Time上不会出现任何问题。
所以建议安装JDK就直接安装Jrockit Real Time。目前最新的版本支持jdk1.6
最重要的,Jrockit是目前作者尝试过的,唯一一套可以在生产环境中进行内存监控的软件,其他软件都会严重降低虚拟机的效率应用基本无法使用。因为内存泄漏有时就算在压力测试中也很难发现。大部分都是在生产环境中产生的。如果没有一个基本不影响运行效率的软件,想解决只能靠运气。以前我解决过一次JAVA内存泄漏的问题,将程序从WEBLOGIC迁移到TOMCAT上解决了决完全属于运气。现在有了这个工具,解决起来就非常方便了。
2. 下载JRockit3.1.0,并安装
下载地址:http://www.oracle.com/technology/software/products/jrockit/index.html
3、配置J2SE泄露检测
运行后,Jrockit Mission Control
很明显byte[]出现了内存泄露。
4、服务器端配置
1. 设置应用程序,使用此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也行。
2. 下载http://download2.bea.com/pub/license/All%20Products/BEA_WebLogic.zip,解压后将其中的LIC-WLRT20.txt文件改名为license.bea上传到%JROCKIT_HOME%/jre/下。
5. 监控端设置
首先安装Jrockit Mission Control 3.1.0,然后运行之。
在JVM浏览器视图中,对连接器文件夹右键,选择新建连接。弹出下图:
在“主机”处输入IP,服务器开放的端口已经是7091,所以不必修改。其他的不用动。点击“测试连接”状态如果是确定则代表已经连接。点击Finish保存新建的连接。在“连接器”文件夹新建了一个连接。
5. 开始监控内存
在新建的连接器上点击右键,选择“启动Memleak”,如图:
IMG
弹出内存泄露检测器,如图:
IMG
最先看见的是“趋势”选项卡,里边标注了占用JAVA堆大于0.1%的类和数组。
“类型”选项卡,显示了类型与类型之间的引用情况。
“实例”选项卡,显示了实例之间的引用情况。
“分配堆栈跟踪”选项卡,显示了指定类型在虚拟机运行过程中被使用的情况。
Jrockit是Bea开发的符合JAVA虚拟机规范的虚拟机+虚拟机监控软件。
虚拟机:Jrockit Real Time
监控软件:Jrockit Mission Control
Jrockit Real Time与SUN的JDK是完全兼容的,也就是说以前在SUN的虚拟机上跑的程序,在Jrockit Real Time上不会出现任何问题。
所以建议安装JDK就直接安装Jrockit Real Time。目前最新的版本支持jdk1.6
最重要的,Jrockit是目前作者尝试过的,唯一一套可以在生产环境中进行内存监控的软件,其他软件都会严重降低虚拟机的效率应用基本无法使用。因为内存泄漏有时就算在压力测试中也很难发现。大部分都是在生产环境中产生的。如果没有一个基本不影响运行效率的软件,想解决只能靠运气。以前我解决过一次JAVA内存泄漏的问题,将程序从WEBLOGIC迁移到TOMCAT上解决了决完全属于运气。现在有了这个工具,解决起来就非常方便了。
2. 下载JRockit3.1.0,并安装
下载地址:http://www.oracle.com/technology/software/products/jrockit/index.html
3、配置J2SE泄露检测
运行后,Jrockit Mission Control
很明显byte[]出现了内存泄露。
4、服务器端配置
1. 设置应用程序,使用此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也行。
2. 下载http://download2.bea.com/pub/license/All%20Products/BEA_WebLogic.zip,解压后将其中的LIC-WLRT20.txt文件改名为license.bea上传到%JROCKIT_HOME%/jre/下。
5. 监控端设置
首先安装Jrockit Mission Control 3.1.0,然后运行之。
在JVM浏览器视图中,对连接器文件夹右键,选择新建连接。弹出下图:
在“主机”处输入IP,服务器开放的端口已经是7091,所以不必修改。其他的不用动。点击“测试连接”状态如果是确定则代表已经连接。点击Finish保存新建的连接。在“连接器”文件夹新建了一个连接。
5. 开始监控内存
在新建的连接器上点击右键,选择“启动Memleak”,如图:
IMG
弹出内存泄露检测器,如图:
IMG
最先看见的是“趋势”选项卡,里边标注了占用JAVA堆大于0.1%的类和数组。
“类型”选项卡,显示了类型与类型之间的引用情况。
“实例”选项卡,显示了实例之间的引用情况。
“分配堆栈跟踪”选项卡,显示了指定类型在虚拟机运行过程中被使用的情况。
相关文章推荐
- 使用JRockit作为工具检测并解决JAVA内存泄漏问题的一次实战.doc
- 【转】使用JRockit作为工具检测并解决JAVA内存泄漏问题的一次实战
- 使用JRockit作为工具检测并解决JAVA内存泄漏问题的一次实战
- 使用 Android Studio 检测内存泄漏与解决内存泄漏问题
- JRockit检测Tomcat内存溢出JAVA内存泄漏问题
- JRockit 解决JAVA内存泄漏问题
- 使用 Android Studio 检测内存泄漏与解决内存泄漏问题
- 使用 Android Studio 检测内存泄漏与解决内存泄漏问题
- 使用 Android Studio 检测内存泄漏与解决内存泄漏问题
- 【转载】JRockit检测Tomcat内存溢出JAVA内存泄漏问题
- JRockit检测Tomcat内存溢出JAVA内存泄漏问题
- JRockit检测Tomcat内存溢出JAVA内存泄漏问题
- 使用 Android Studio 检测内存泄漏与解决内存泄漏问题
- 使用 Android Studio 检测内存泄漏与解决内存泄漏问题
- JRockit检测Tomcat内存溢出JAVA内存泄漏问题
- EventBus 和RxLifecycle 一起使用所引发的问题及解决办法 -java.lang.NoClassDefFoundError: android/os/PersistableBundle
- 使用install4j打包java项目教程及一些小问题的解决
- 使用idea创建web项目后无法创建Java文件夹的问题的解决办法
- JAVA内存泄漏问题及解决办法
- java中使用Cookie替代Session解决跨域Session失效问题