`
xinklabi
  • 浏览: 1591357 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

java性能调试工具JProfiler简介与学习笔记

 
阅读更多
JProfiler是一个全功能的Java剖析工具(profiler),专用于分析J2SE和J2EE应用程序
 

1简介编辑

JProfiler[1]是一个商业授权的Java剖析工具,由EJ技术有限公司,针对的Java EE和Java SE应用程序开发的。
它把CPU、执行绪和内存的剖析组合在一个强大的应用中。JProfiler可提供许多IDE整合和应用服务器整合用途。
JProfiler的是一个独立的应用程序,是Eclipse软件的插件。
它允许两个内存剖面评估内存使用情况和动态分配泄漏和CPU剖析,以评估线程冲突。

2作用编辑

JProfiler直觉式的GUI让你可以找到性能瓶颈、抓出内存漏失(memory leaks)、并解决执行绪的问题。它让你得以对heap walker作资源回收器的root analysis,可以轻易找出内存漏失;heap快照(snapshot)模式让未被参照(reference)的对象、稍微被参照的对象、或在终结(finalization)队列的对象都会被移除;整合精灵以便剖析浏览器的Java外挂功能。

3JProfiler支持以下操作模式:编辑

  • 本地会话实时分析模式
    用户一旦定义好了其应用程序启动方式,JProfiler即能对之进行设置,用户即刻便能从设置好的JVM中看到实时数据。用户若不想进行会话配置,其可以从多个IDE插件中选择其最喜欢的那个对应用程序进行配置。
  • 远程会话实时分析模式
    通过修改Java开始命令行方式的VM参数,用户可使任意Java应用程序监听来自的JProfiler GUI的连接。该设置程序不但可以在本地计算机上运行,还可以在网络中作为某个设置程序的附加程序使用。此外,JProfiler还提供了相当多的集成向导,可用于主流的可以帮助用户安装和设置其应用程序的应用程序服务器。
  • 离线分析模式
    用户无需通过JProfiler GUI连接应用程序即可对之进行设置。在离线设置模式下,用户可以使用功能强大的JProfiler触发系统或者JProfiler' API对设置代理进行控制,然后将快照保存入磁盘。稍后用户便可使用命令行导出工具或者蚂蚁任务导出工具,在JProfiler GUI或编程方式的设置导出视图中打开这些快照。
  • 快照比较
    在JProfiler中,用户可以将当前的所有设置数据保存为一个快照存入磁盘中。JProfiler提供了丰富的比较功能以对比两个或者多个快照之间的不同。用户可从编程的命令行比较工具和ant task比较工具中选择其一创建对比报告。
  • 查看HPROF快照
    JProfiler能打开用JVM工具(比如jconsole、 jmap或通过-XX:+HeapDumpOnOutOfMemoryError JVM参数触发)创建的HPROF快照文件
 
 
参考资料

 

JProfiler学习笔记

 

一、安装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,JMSJNDI服务请求都被注释在请求树中。请求树可以根据ServletJSPURL的不同需要进行拆分。
  • 热点 Hot spots 
    显示消耗时间最多的方法的列表。对每个热点都能够显示回溯树。该热点可以按照方法请求,JDBCJMSJNDI服务请求以及按照URL请求来进行计算。
  • 访问图 Call graph 
    显示一个从已选方法、类、包或J2EE组件开始的访问队列的图。

4 线程剖析 Thread profiler

对线程剖析,JProfiler提供以下视图:

  • 线程历史 Thread history 
    显示一个与线程活动和线程状态在一起的活动时间表。
  • 线程监控 Thread monitor 
    显示一个列表,包括所有的活动线程以及它们目前的活动状况。
  • 死锁探测图表 Deadlock Detection 
    显示一个包含了所有在JVM里的死锁图表。
  • 目前使用的监测器 Current monitor useage 
    显示目前使用的监测器并且包括它们的关联线程。
  • 历史检测记录 History usage history 
    显示重大的等待事件和阻塞事件的历史记录。
  • 监测使用状态 Monitor usage statistics 
    显示分组监测,线程和监测类的统计监测数据。

5VM 遥感勘测技术 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.jspinit2.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.jspinit1.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可以让我们找到哪些类在调用后没有被释放(很重要!!!)

 

查看哪些类被发生了变化:

 

红色的变成是发生变化的对象及其数量。

我刚才执行了4init1.jsp1init2.jsp,正好产生了50000TestBean对象,和图示显示的一样。

3.  过一会后,按F4键进行垃圾回收。但回收完成后,这些对象依然存在,说明某些地方对这个类的引用没有被释放!

4.  找出是哪些地方使用了TestBean类,并且没有释放它们

cn.test.TestBean对象上点击右键选择“Take Heap Snapshot for Selection”,观察它的heap

 

下一步:

 

点击“OK”:

 

在该类中点击右键,在出现的菜单中选择“Use Selected Objects”:

 

出现如下窗口:

 

选择”Allocations”,点击“OK,然后我们要的结果就出来了

 

图中显示调用此类的地方是init1.jspinit2.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.jspinit2.jsp后,可以看到内存是TestBean对象的数量增加了,然后执行free.sjp,接着再执行F4进行垃圾回收,立刻可以看到TestBean对象被释放掉了。

 

 

 

 

 

参考文档地址:

http://www.blogjava.net/anymobile/articles/28248.html

分享到:
评论

相关推荐

    JProfile_help.pdf_学习笔记_01

    **JProfiler学习笔记** 在IT行业中,性能优化是提升软件质量与用户体验的关键环节。JProfiler作为一款强大的Java性能分析工具,被广泛应用于源码级别的内存分析、CPU性能监控以及线程排查等方面。本文将深入探讨...

    狂神说Java学习笔记-GUI

    11. **调试与测试**:在开发GUI应用时,使用像JProfiler或VisualVM这样的工具可以帮助分析性能,找出内存泄漏等问题。此外,JUnit和其他单元测试框架也能帮助测试GUI组件的功能。 通过深入理解和实践这些知识点,...

    学习笔记

    【标题】:“学习笔记”——探索源码与工具的奥秘 在“学习笔记”这个压缩包中,我们可以预见到一系列关于源码分析和工具使用的深入探讨。这是一份宝贵的资源,适合那些想要提升自己在IT领域技术能力,尤其是对源码...

    Java 疑难杂症_笔记.zip

    笔记可能包括JVM的运行模式、类加载机制、方法区、类的生命周期,以及如何通过JProfiler、VisualVM等工具进行性能监控和调优。 第六,笔记可能还涉及到了Java网络编程,如Socket通信、HTTP客户端服务器实现,以及...

    一名程序员,实用的一些工具

    性能分析和监控工具如JProfiler(Java性能分析)、New Relic或Prometheus也是优化应用程序的关键。它们可以帮助识别性能瓶颈,提升系统效率。 最后,版本管理工具如Ansible或Chef用于基础设施的配置和自动化,而...

    java架构面试专题(含答案).rar

    9. **性能监控和调试**:如使用JProfiler、VisualVM等工具进行性能分析,理解CPU、内存、线程等资源的使用情况,以及如何定位和解决问题。 10. **异常处理与日志记录**:理解Java异常处理机制,合理设置日志级别,...

    JVM成神之路笔记整理版

    5. **JVM性能优化**:学习如何使用JVisualVM、JProfiler等工具监控JVM,分析内存泄漏、CPU占用过高、线程死锁等问题,以及如何调整JVM参数来提升应用性能。 6. **JIT编译器**:JIT是Java解释器和编译器的结合,它在...

    <<你必须知道的261个Java语言问题>>电子书(图片版)、部分源码及勘误

    对于性能优化,了解JProfiler、VisualVM等性能分析工具,以及内存泄漏检测和线程分析,都是提升代码效率的关键。 总之,《你必须知道的261个Java语言问题》电子书结合源码文件,提供了一个全面的学习路径,不仅帮助...

    javapms-1.2-beta.zip

    4. **Java性能分析**:包括JVM内存模型、垃圾回收机制、性能监控API(如JMX)以及如何使用工具如VisualVM或JProfiler进行分析。 5. **多线程编程**:如果涉及到并发处理,理解Java并发API如synchronized、...

    TIL::rocket:今天我学会了매일리정리

    除此之外,像Postman这样的工具用于API测试,VisualVM用于性能分析,JProfiler用于内存泄漏检测,都是开发者必备的辅助工具。 【数据库】:描述中提到了“MySQL”,这是一款流行的开源关系型数据库管理系统,广泛...

Global site tag (gtag.js) - Google Analytics