一、安装JProfiler
从http://www.ej-technologies.com/下载5.1.2并申请试用序列号
二、主要功能简介
1.内存剖析 Memory profiler
JProfiler 的内存视图部分可以提供动态的内存使用状况更新视图和显示关于内存分配状况信息的视图。所有的视图都有几个聚集层并且能够显示现有存在的对象和作为垃圾回收的对象。
所有对象
显示类或在状况统计和尺码信息堆上所有对象的包。你可以标记当前值并显示差异值。
记录对象 Record objects
显示类或所有已记录对象的包。你可以标记出当前值并且显示差异值。
分配访问树 Allocation call tree
显示一棵请求树或者方法、类、包或对已选择类有带注释的分配信息的J2EE组件。
分配热点 Allocation hot spots
显示一个列表,包括方法、类、包或分配已选类的J2EE组件。你可以标注当前值并且显示差异值。对于每个热点都可以显示它的跟踪记录树。
2.堆遍历 Heap walker
在JProfiler的堆遍历器(Heap walker)中,你可以对堆的状况进行快照并且可以通过选择步骤下寻找感兴趣的对象。堆遍历器有五个视图:
类 Classes
显示所有类和它们的实例。
分配 Allocations
为所有记录对象显示分配树和分配热点。
索引 References
为单个对象和“显示到垃圾回收根目录的路径”提供索引图的显示功能。还能提供合并输入视图和输出视图的功能。
数据 Data
为单个对象显示实例和类数据。
时间 Time
显示一个对已记录对象的解决时间的柱状图。
3. CPU 剖析 CPU profiler
JProfiler 提供不同的方法来记录访问树以优化性能和细节。线程或者线程组以及线程状况可以被所有的视图选择。所有的视图都可以聚集到方法、类、包或J2EE组件等不同层上。CPU视图部分包括:
访问树 Call tree
显示一个积累的自顶向下的树,树中包含所有在JVM中已记录的访问队列。JDBC,JMS和JNDI服务请求都被注释在请求树中。请求树可以根据Servlet和JSP对URL的不同需要进行拆分。
热点 Hot spots
显示消耗时间最多的方法的列表。对每个热点都能够显示回溯树。该热点可以按照方法请求,JDBC,JMS和JNDI服务请求以及按照URL请求来进行计算。
访问图 Call graph
显示一个从已选方法、类、包或J2EE组件开始的访问队列的图。
4. 线程剖析 Thread profiler
对线程剖析,JProfiler提供以下视图:
线程历史 Thread history
显示一个与线程活动和线程状态在一起的活动时间表。
线程监控 Thread monitor
显示一个列表,包括所有的活动线程以及它们目前的活动状况。
死锁探测图表 Deadlock Detection
显示一个包含了所有在JVM里的死锁图表。
目前使用的监测器 Current monitor useage
显示目前使用的监测器并且包括它们的关联线程。
历史检测记录 History usage history
显示重大的等待事件和阻塞事件的历史记录。
监测使用状态 Monitor usage statistics
显示分组监测,线程和监测类的统计监测数据。
5.VM 遥感勘测技术 VM telemetry
观察JVM的内部状态,JProfiler提供了不同的遥感勘测视图,如下所示:
堆 Heap
显示一个堆的使用状况和堆尺寸大小活动时间表。
记录的对象 Recorded objects
显示一张关于活动对象与数组的图表的活动时间表。
垃圾回收 Garbage collector
显示一张关于垃圾回收活动的活动时间表。
类 Classes
显示一个与已装载类的图表的活动时间表。
线程 Threads
显示一个与动态线程图表的活动时间表。
三、实战
(一)任务目标
找出项目中内存增大的原因
(二)配置说明
操作系统:Windows2003
Web容器:Tomcat5.0.23
JDK版本:sun1.4.2
监控类型:本地
Jprofiler安装路径:D:\jprofiler5
Tomcat安装路径:D:\Tomcat5
(三) 测试项目
1. 新建WEB项目test
2. 建包cn.test
3. 在该包下建类文件TestMain.java 和 TestBean.java
package cn.test;
public class TestBean {
String name = "";
}
package cn.test;
import java.util.ArrayList;
public class TestMain {
public static ArrayList list = new ArrayList(); //存放对象的容器
public static int counter = 0; //作统计用
}
4.建测试用的JSP文件init1.jsp、init2.jsp
Init1.jsp(每次执行都创建1万个TestBean对象)
<%@ page language="java" import="cn.test.*" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>init</title>
</head>
<body><%
for(int i=0;i<10000;i++){
TestBean b = new TestBean();
TestMain.list.add(b);
}
%>
SIZE:<%=TestMain.list.size()%><br/>
counter:<%=TestMain.counter++%>
</body>
</html>
Init2.jsp和init1.jsp一模一样即可(后面有用)。
(四) 配置测试用例
1. 点击d:\jprofiler5\bin\jprofiler.exe
2. 执行菜单SessionàIntegration WizardsàNew ServerIntegration
选择是本地测试还是远程测试:
选择tomcat运行的脚本文件:
选择虚拟机的类型:
选择监控端口:
用默认的即可
选择Web容器是否和Jprofiler一起运行:
默认即可
配置提示:
在“远程控制”的时侯要仔细阅读一下。
然后选择立即起动,开始运行。
点击“OK”,我们可以看到另外一个小窗口出来了:
Jprofiler的窗口为:
这样我们就可以进行监控了!
(五) 开始测试
1. 在IE地址栏中输入:http://localhost/test/init1.jsp,执行一次,我们可以在内存视图中看到cn.test.TestBean对象被创建了10000次:
2.标记现在的状态,然后再执行init1.jsp和,init2.jsp可以让我们找到哪些类在调用后没有被释放(很重要!!!)
查看哪些类被发生了变化:
红色的变成是发生变化的对象及其数量。
我刚才执行了4次init1.jsp和1次init2.jsp,正好产生了50000个TestBean对象,和图示显示的一样。
3. 过一会后,按F4键进行垃圾回收。但回收完成后,这些对象依然存在,说明某些地方对这个类的引用没有被释放!
4. 找出是哪些地方使用了TestBean类,并且没有释放它们
在cn.test.TestBean对象上点击右键选择“Take Heap Snapshot for Selection”,观察它的heap
下一步:
点击“OK”:
在该类中点击右键,在出现的菜单中选择“Use Selected Objects”:
出现如下窗口:
选择”Allocations”,点击“OK”,然后我们要的结果就出来了
图中显示调用此类的地方是init1.jsp和init2.jsp,并且各自占用的比率都列出来了。
既然问题的所在找出来了,接下来就该去解决问题了!
(五)总结
其实,我们在测试内存占用时还可以另外写一个释放内存的JSP文件来配合测试,会更清楚一些:
Free.sjp
<%@ page language="java" import="java.util.*,cn.test.*" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>init</title>
</head>
<body>
<%TestMain.list.clear(); %> collection OK!
</body>
</html>
在点击完init1.jsp或init2.jsp后,可以看到内存是TestBean对象的数量增加了,然后执行free.sjp,接着再执行F4进行垃圾回收,立刻可以看到TestBean对象被释放掉了。
分享到:
相关推荐
JProfiler是一款强大的Java性能分析工具,它可以帮助开发者深入洞察应用程序的内存使用、CPU消耗、线程状态以及对象生命周期等关键性能...学习并熟练掌握JProfiler的使用,对于提高Java程序的性能调优能力至关重要。
对于JProfiler的入门,"JProfiler入门教程-1.1.pdf"是一个很好的学习资源。这个教程可能涵盖了以下内容: 1. **安装与启动**:讲解如何下载并安装JProfiler,以及启动方式,包括通过命令行参数启动被监控的应用程序...
在使用JProfiler时,可以参考"jprofiler4.32教程.pdf"进行学习。这份教程将指导你如何启动会话,连接到Java应用程序,以及如何使用各个功能模块: 1. **启动会话**:启动JProfiler,选择“Start Profiling Session...
4. **学习曲线**:JProfiler功能强大,初学者可能需要时间学习和熟悉其操作界面和功能,耐心研究和实践是提升效率的关键。 总结,JProfiler 6.0.6作为一款优秀的Java性能分析工具,提供了全面的性能监控和优化手段...
【JProfiler实例】是指通过实际操作JProfiler来学习和掌握其使用方法。这些实例通常包括如何启动JProfiler,连接到Java应用程序,以及如何利用它的各种视图和功能进行性能分析。例如,你可以通过JProfiler的CPU ...
JProfiler 4.0版本以中文编写,由浅入深,图文并茂,为中文用户提供了一个便捷的入门和深入学习的途径。通过使用手册中的各种功能和视图,开发者可以有效地对Java应用程序进行性能分析和调试,提高软件的性能和质量...
4. **教学和研究**: 作为学习Java性能调优的工具,JProfiler11提供了丰富的数据和可视化图表,有助于理解和掌握相关概念。 ### 集成到IntelliJ IDEA 1. 安装JProfiler插件: 在IntelliJ IDEA的插件市场搜索并安装...
《JProfiler测试工具及学习文档详解》 JProfiler是一款强大的Java性能分析工具,深受开发者喜爱。它提供了全方位的性能监控,包括内存分析、CPU使用率、线程分析、方法调用统计、JVM配置检查等多个方面,对于优化...
- 使用注册机激活软件属于非法行为,仅适用于学习和研究目的。 - 建议支持正版软件,这样不仅可以获得官方的技术支持,还能促进软件行业的健康发展。 - 在使用过程中,如果遇到任何问题,建议查阅官方文档或者寻求...
用户可以根据提供的文档或在线资源学习如何运行和配置该工具。 ### 应用场景 JProfiler适用于各种Java开发场景,包括但不限于: - 在应用上线前进行性能测试,确保软件在预期负载下的表现。 - 在生产环境中无侵入...
**JProfiler资料合集概述** JProfiler是一款强大的Java性能分析工具,它被广泛用于诊断和优化Java应用程序的性能。...通过深入学习和实践,开发者可以更好地理解和解决性能问题,提升应用程序的运行效率。
【JProfiler工具详解及其在内存泄露检测中的应用】 JProfiler是一款强大的Java性能分析工具,尤其在内存泄露检测方面表现出色。在上述描述中,作者提到使用JProfiler来监控JAVA程序的内存泄露情况,但并未成功定位...
《JProfiler实战与内存泄漏检测》 在Java开发过程中,内存泄漏是一个常见而又棘手的问题。当WEB服务频繁出现`...在实际操作中,结合持续的学习和实践,开发者可以更熟练地运用JProfiler,解决各种复杂的性能问题。
同时,您不想花时间学习如何使用该工具。JProfiler就是这样:简单而强大的同时。配置会话是直截了当的,第三方集成使得开始变得轻而易举,并且以自然的方式呈现数据分析。在所有级别上,JProfiler都经过精心设计,可...
通过本文档的实例分析,读者将学习到如何通过JProfiler这个工具来监控Java应用的性能,特别是内存使用情况。这对于测试工程师来说是一个非常重要的技能,因为性能优化和问题诊断是保证软件质量的关键环节之一。通过...
根据提供的文件信息,本文将对JProfiler的基本使用方法进行详细阐述,包括启动中心的使用、会话管理、...通过本指南的学习,希望用户能够熟练掌握 JProfiler 的基本操作,并能够在实际工作中有效利用这款工具解决问题。
JProfiler是一款功能强大的Java性能分析工具,通过本手册的学习,用户可以掌握如何创建和管理会话、如何使用各种监控视图来分析程序的性能问题。无论是对于开发人员还是运维工程师来说,熟练掌握JProfiler都将极大地...
### JProfiler帮助文档知识点概述 #### 一、背景与配置(A.1) ...以上内容涵盖了JProfiler的主要功能和使用方法,通过这些知识点的学习,开发者可以更高效地使用JProfiler来优化Java应用程序的性能。
【JProfiler】是一款强大的Java剖析工具,专门设计用于分析J2SE和J2EE应用程序的性能。它提供了全面的功能,包括CPU使用率、线程活动和内存管理的深入剖析。这款工具可以帮助开发者识别和解决Java应用程序中的性能...