当前位置:文档之家› JProfiler跟踪和检查系统性能的好工具

JProfiler跟踪和检查系统性能的好工具

JProfiler跟踪和检查系统性能的好工具

从事Java开发有段时间了,经常为Java抛内存溢出和系统时常的罢工而烦恼。有时你也许有这样的经历为了,找寻系统的漏洞,几乎把所有的代码都翻了一遍,

也许这比你原来写Code还花费精力和时间;有时你也许在梦想有个工具能时时监测系统,提供漏洞和bug的蛛丝马迹(有点象打广告哦,不过我觉得我这个我非常喜爱的工具-JProfiler 打打广告,我非常乐意)。如果找bug就象看病一样,那么Jprofiler就是那台可以为提供诊断依据和建议的X光扫描器,不信你用用就知道了。

1 JProfiler是做什么的哦?

JProfiler工具主要用于检查和跟踪系统(限于Java开发的)的性能。JProfiler可以通过时时的监控系统的内存使用情况,随时监视垃圾回收,线程运行状况等手段,从而很好的监视JVM运行情况及其性能。

2 如何获取JProfiler

你可以试试下载JProfiler的评估版(有十天的使用时间),目前的最新版本为2.4版本

你可以在在这儿获取:https://www.doczj.com/doc/b85281094.html,/products/jprofiler/overview.html

你需要注册,然后JProfiler公司会通过Email方式发送一个key给你,在第一次使用时需要输入这个key。

3 如何监视你的第一个系统

首先请打开你的Jprofiler。

这时展现在你眼前的第一个页面,如上图。第一个页面就是你原来将来过的监视Project(就当成一个Project好了)。第二个页面是需要创建新的监视Project。

这时你就可以点击按钮"New session"按钮了。下一个页面将会出现在你的眼帘之中。

第一个就是Session名字了,随便取(不修改也行),

第二个Session type就是监视类型了,我们就选择监视本地的系统吧。

然后选择Java VM。在安装Jprofiler时,搜索出系统已经安装了的jvm,选择一个好了。Working directory:这个目录启动系统的运行目录,方便于你找那儿些配置文件,以及寻找你classpath中配置的jar文件

VM arguments参数,如果你想配置JVM的系统参数请在此配置,比如么配置内存的最大,最小值,配置方式和常用配置方式类似。

Main class or executable JAR:选择可以直接运行的jar文件或者填上要运行主Class。(如果你的jar文件中META-INF/MANIFEST.MF 包含有Main-Class:就可以直接运行了)Arguments就是main(String[] args)中要传递的参数

然后就该Additional java file path中加入所有需要的classpath或者jar文件

这些配置搞定后就可以点击ok按钮了,在评估版本中将会弹出一个对话框(就是通知你评估版本还有多长时间过期),不管那么多点击按钮"Evaluate",然后继续点击按钮"ok"

好了,我们可以看看我们的劳动成果了,倒杯Coffee,享受那浓浓Coffee情。

这是内存使用情况

这是每个class,甚至每个方法的内存使用比率

这是线程使用情况

一、安装JProfiler

从https://www.doczj.com/doc/b85281094.html,/下载 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-8 859-1" %>

< html >

< head >

< title > init

< body > <%

for ( int i=0;i<10000;i++){

TestBean b = new TestBean();

TestMain.list.add(b);

}

%>

SIZE: <%= TestMain.list.size() %> < br />

counter: <%= TestMain.counter++ %>

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”:

相关主题
文本预览
相关文档 最新文档