1  前言

  开始之前,我问自己,为什么要学习jProfiler?

  回答之前先让我们来看看什么是jProfiler:JProfiler是一个商业授权的Java剖析工具,由EJ技术有限公司,针对Java EE和Java SE应用程序开发的。它允许两个内存剖面评估内存使用情况和动态分配泄漏和CPU剖析,以评估线程冲突。JProfiler直觉式的GUI让你可以找到性能瓶颈、抓出内存漏失(memory leaks)、并解决执行绪的问题。[from 百度百科]

  简而言之,它能通过评估CPU、内存以及线程来避免内存漏失,是一个性能监测工具。

  那我们为何要监控性能呢?

  试想,我们发布在服务器上的项目如何测试其健壮性以及可行性?如何做出一个合格放心的产品来?我给出的答案是在负载测试下进行数据收集和数据监控,调整你的代码或者配置使你的项目运行状况达到最优。

  jProfiler正是扮演着这样的一个角色,那么对于完全没接触过的人,如何开始?请移步下文。

2 如何开始

2.1 下载、安装并和JProfiler say HelloWorld

  Step 1,到EJ的项目主页下载最新版的JProfiler。

  Step 2,安装之。笔者这里有一个JProfiler7的License Key:L-J7-feng#1000-289nsew356eehq#9163,填写密钥时name和company随便填就好了[分享即是美德]。假如密钥失效,安装后有免费的10天试用期,选中“Evaluation”表示评估试用即可。

  Step 3,假设我们是用Eclipse开发的,点击Session→IDE Integrations,选中你的Eclipse版本,点击OK然后按提示操作即可。操作成功后,我们可以在Eclipse看到JProfiler扩展插件如下:

  

  Step 4,让我们来用一个小小的测试例子开启jProfiler之旅,编写程序如下,并运行之。再点击图标启动JProfiler。

package jProfiler;public class Test extends Thread{public static void main(String[] args) throws InterruptedException {Test t = new Test();for(int i=1; i<10000; i++) {new HelloWorld();t.sleep(100); // 休眠100毫秒
        }}
}class HelloWorld {public HelloWorld() {System.out.println("Hello Jayzee!");}
}

  Step 5,jProfiler启动的时候会自动捕获到运行中的J2SE和J2EE程序,如下所示,选中并点击OK(tips:你也可以点"Show Services"进行手动刷新,JProfiler会自动帮你捕获运行中的java程序)。

  

  勾选记录CPU和在启动的时候记录分配情况,其他的默认不动即可。

  

  Step 6,通过上面的操作我们就可以看到JProfiler的监控界面啦

  

  Step 7,关于一些详细使用方法我们在下文中讲解,这一章节的最后有一个小技巧讲给大家。在我们关闭的时候,JProfiler会提示我们要不要保存当前使用的这个session,我们点击保存,以后就可以在Session→Start Center里面直接调用这个session了。

  

  然而实际上记录的这个"Helloworld"的session是不可以运行的,这里只是跟大家讲解一下怎样使用这个技巧而已。

  

  如何让这个Helloworld跑起来?你需要在cmd下用javac命令把Test.java编译成Test.class然后点选上图右上的红框处,然后进行两个配置:1.选中Launch模式并点选Application按钮;2.在Main class选中你编译好的class文件然后逐步按确认。

  

  配置好之后你就可以通说双击这个session来启动啦,效果如下:

  

2.2 配置tomcat项目并启用监控

  假设你手头上有个项目是要发布在tomcat服务器上的,例如笔者手头上的项目名称是DSPMSU_For_Display,tomcat服务器是7.x版本,下面我们讲解如何对这个本地的tomcat7服务器进行监控,细节如下:

  点击Session→Integration Wizards→New Server Integration→Apache Tomcat 7.x→On this computer→勾选你的JVM信息→Waif for a connection from the JProfiler GUI(就是由JProfiler帮你启动tomcat)→选着你的startup.bat→保持默认端口8849→启动。  

  tips:

  1. 你在JProfiler中保存的这个session,如果你双击运行它,它的实质也是去调用startup.bat来启动,因此假如你已经手动启用了tomcat然后又在JProfiler启动这个session,这时候就会报错--端口被占用;

  2. 监控过程中,假如tomcat意外关闭,这时候会报下面这样一个错误,错误提示你要勾选"Keep VM alive",在Start Center编辑你保存的session→Profiling Settings选项卡→Customize Profiling Settings→Miscellaneous→Keep VM alive即可。

  

3 如何监控性能

3.1 直观认识

  这么强大的一个工具,怎样性能监控呢?这个课题太大,我们把范围缩小一点,如何入门呢?偶然在CSDN上找到一位blogger的博文,里面的“实战”例子绝对可以让你对性能监控有一个直观的认识。

  请先花几分钟看看这篇博文:JProfiler学习笔记

  .

  .

  .

  .

  .

  .

  .

  几分钟很快就过去了,让我们做以下几个总结:

  1. 在Memory Views视图里右击相关类,选中Mark Current Values可以标记当前值,方便后续进行比较,注意绿色和红色之分;

  

  标记完之后,通过GUI界面可以很方便的看出值的变化情况

  

  2. 按F4或者点击窗体上面的绿色图标Run GC可以通知JVM进行垃圾回收的动作(只是通知,不是强制回收);

  

  3. 在Memory Views视图里右击相关类,点选Show Selection In Heap Walker可以进行堆内存跟踪;

  

  4. 在Heap Walker视图中右击相关类,点选Used Selected Instances→Allocation Tree可以看到关于该类的调用细节和内存使用情况。

  

  Allocation tree看的是调用树,你也可以根据需要选择其他选项。

  

3.2 模块介绍

  模块的介绍主要是对JProfiler的具体功能进行介绍,部分内容参照自博客:JProfiler 解决 Java 服务器的性能跟踪,如果读者英文阅读能力比较强也可以在工具栏上边点击Help,直接阅读英文帮助,下文部分内容亦是参照自英文API。

  

3.2.1 内存视图 Memory Views

  JProfiler的内存视图部分可以提供动态的内存使用状况更新视图和显示关于内存分配状况信息的视图。所有的视图都有几个聚集层并且能够显示现有存在的对象和作为垃圾回收的对象。

  

  • 所有对象 All Objects
    显示类或在状况统计和尺码信息堆上所有对象的包。你可以标记当前值并显示差异值。
  • 记录对象 Record Objects 
    显示类或所有已记录对象的包。你可以标记出当前值并且显示差异值。
  • 分配访问树 Allocation Call Tree 
    显示一棵请求树或者方法、类、包或对已选择类有带注释的分配信息的J2EE组件。
  • 分配热点 Allocation Hot Spots 
    显示一个列表,包括方法、类、包或分配已选类的J2EE组件。你可以标注当前值并且显示差异值。对于每个热点都可以显示它的跟踪记录树。
  • 类追踪器 Class Tracker 
    类跟踪视图可以包含任意数量的图表,显示选定的类和包的实例与时间。

3.2.2 堆遍历 Heap Walker

  在JProfiler的堆遍历器(Heap Walker)中,你可以对堆的状况进行快照并且可以通过选择步骤下寻找感兴趣的对象。堆遍历器有五个视图:

  

  • 类 Classes 
    显示所有类和它们的实例,可以右击具体的类"Used Selected Instance"实现进一步跟踪。
  • 分配 Allocations 
    为所有记录对象显示分配树和分配热点。
  • 索引 References 
    为单个对象和“显示到垃圾回收根目录的路径”提供索引图的显示功能。还能提供合并输入视图和输出视图的功能。
  • 时间 Time 
    显示一个对已记录对象的解决时间的柱状图。
  • 检查 Inspections 
    显示了一个数量的操作,将分析当前对象集在某种条件下的子集,实质是一个筛选的过程。
  • 图表 Graph
    你需要在references视图和biggest视图手动添加对象到图表,它可以显示对象的传入和传出引用,能方便的找到垃圾收集器根源。

  tips:在工具栏点击"Go To Start"可以使堆内存重新计数,也就是回到初始状态。

  

3.2.3 CPU 视图 CPU Views

  JProfiler 提供不同的方法来记录访问树以优化性能和细节。线程或者线程组以及线程状况可以被所有的视图选择。所有的视图都可以聚集到方法、类、包或J2EE组件等不同层上。CPU视图部分包括:

  

  • 访问树 Call Tree 
    显示一个积累的自顶向下的树,树中包含所有在JVM中已记录的访问队列。JDBC,JMS和JNDI服务请求都被注释在请求树中。请求树可以根据Servlet和JSP对URL的不同需要进行拆分。
  • 热点 Hot Spots 
    显示消耗时间最多的方法的列表。对每个热点都能够显示回溯树。该热点可以按照方法请求,JDBC,JMS和JNDI服务请求以及按照URL请求来进行计算。
  • 访问图 Call Graph 
    显示一个从已选方法、类、包或J2EE组件开始的访问队列的图。
  • 方法统计 Method Statistis
    显示一段时间内记录的方法的调用时间细节。

3.2.4 线程视图 Thread Views

  JProfiler通过对线程历史的监控判断其运行状态,并监控是否有线程阻塞产生,还能将一个线程所管理的方法以树状形式呈现。对线程剖析,JProfiler提供以下视图:

  

  • 线程历史 Thread History 
    显示一个与线程活动和线程状态在一起的活动时间表。
  • 线程监控 Thread Monitor 
    显示一个列表,包括所有的活动线程以及它们目前的活动状况。
  • 线程转储 Thread Dumps 
    显示所有线程的堆栈跟踪。

3.2.5 监控器视图 Monitor Views

  JProfiler提供了不同的监控器视图,如下所示:

  

  • 当前锁定图表 Current Locking Graph 
    显示JVM中的当前锁定情况。
  • 当前监视器 Current Monitors 
    显示当前正在等待或阻塞中的线程操作。
  • 锁定历史图表 Locking History Graph 
    显示记录在JVM中的锁定历史。
  • 监控器历史 Monitor History 
    显示等待或者阻塞的历史。
  • 监控器使用统计 Monitor Usage Statistics 
    计算统计监控器监控的数据。

3.2.6 VM遥感勘测技术视图 VM Telemetry Views

  观察JVM的内部状态,JProfiler提供了不同的遥感勘测视图,如下所示:

  

  • 内存 Memory 
    显示堆栈的使用状况和堆栈尺寸大小活动时间表。
  • 记录的对象 Recorded Objects 
    显示一张关于活动对象与数组的图表的活动时间表。
  • 记录的生产量 Recorded Throughput 
    显示一段时间累计的JVM生产和释放的活动时间表。
  • 垃圾回收活动 GC Activity
    显示一张关于垃圾回收活动的活动时间表。
  • 类 Classes 
    显示一个与已装载类的图表的活动时间表。
  • 线程 Threads 
    显示一个与动态线程图表的活动时间表。
  • CPU负载 CPU Load 
    显示一段时间中CPU的负载图表。

3.3 使用心得

3.3.1 看内存图

  

  Key 1,把目光集中到上图的蓝色部分,可以发现每次内存上升到一个峰值之后便会下跌,这个动作其实就是GC在回收内存,并且上升和回收的幅度大抵相同,如果你发现内存图中可用内存随着时间的流逝一直在上升而没有GC回收的动作,那么你就要怀疑它是否存在着内存泄露了;

  Key 2,当你怀疑内存泄露时,可以在Memory Views视图Mark Current Values,然后在一段时间后F4,找出那个没有被释放掉的异常类对其进行深一步的追踪;

  Key 3,追踪主要使用Heap Walker的各项功能,各功能具体能做何种分析请复习章节3.1直观认识和3.2.2 堆遍历 Heap Walker。

4 如何远程监控

4.1 客户端和服务器都是Windows系统

4.2 客户端是Windows,服务器是Linux

JProfiler之java剖析工具相关推荐

  1. jav中什么是组织java程序_Java程序的执行过程中用到一套JDK工具,其中javaprof.exe是指()。A.Java调试器B.Java剖析工具C.Jav...

    Java程序的执行过程中用到一套JDK工具,其中javaprof.exe是指().A.Java调试器B.Java剖析工具C.Jav 更多相关问题 "投资收益"账户属于(). A.损 ...

  2. Java剖析工具JProfiler入门使用教程:离线剖析和触发器

    2019独角兽企业重金招聘Python工程师标准>>> Java性能分析工具JProfiler提供了2种完全不同的方法剖析应用程序.默认情况下,用户可以利用JProfiler GUI ...

  3. JProfiler 解决 Java 服务器的性能跟踪

    作者:徐建祥(netpirate@gmail.com) 时间: 2006/01/05 来自:http://www.anymobile.org 1.摘要......................... ...

  4. 常用 Java Profiling 工具的分析与比较

    相对于静态代码分析,Profiling 是通过收集程序运行时的信息来研究程序行为的动态分析方法.其目的在于定位程序需要被优化的部分,从而提高程序的运行速度或是内存使用效率.收集程序运行时信息的方法主要 ...

  5. 高效Java编程工具集锦

    Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松.目前,市面上涌现出越来越多的高效编程工具.所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用.正在使用或 ...

  6. java 编程工具_Java开发工具可以促进编程!

    java 编程工具 Java开发人员通常尝试找到快速有效地编写高质量Java代码的方法,以使他们的编程工作变得更轻松. 由于情况发生了变化,因此出现了越来越多的工具. 因此,下面列出了大多数开发人员已 ...

  7. java开源工具简介(2)

    java开源工具简介(2) OpenCms [Java开源 CMS系统] OpenCms是一个J2EE的产品,它是用Java写成的.它和Tomcat捆绑在一起.但是也能够使用ATG Dynamo.We ...

  8. Java开发工具简介

    Java语言是一种解释性的语言,即读一句程序执行一句,这样就需要一 个解释器完成源程序到机器语言的翻译过程.同时Java是跨平台的语 言,跨平台是指Java程序可以在安装任何操作系统的计算机上运行,起 ...

  9. java+构建+工具+Ant+Maven+Gradle

    java+构建+工具+Ant+Maven+Gradle Ant+Maven+Gradle+............ 目前: Ant已经销声匿迹.Maven也没落了,而Gradle的发展则如日中天. M ...

最新文章

  1. linux 存储映射lun 给_如何在 Linux 上扫描/检测新的 LUN 和 SCSI 磁盘 | Linux 中国
  2. excel文件被写保护怎么解除_u盘被写保护怎么解除,看完你就知道了
  3. 「雕爷学编程」Arduino动手做(30)——光敏二极管模块
  4. 笔记 3 文件的特殊属性,权限
  5. MT4 服务器信号,手机实时接收MT4软件指标信号(简单几步设置搞定)
  6. ubuntu安装vasp_Ubuntu常用软件的安装
  7. 翻译:最令人印象深刻的YouTube频道,可让您学习AI,机器学习和数据科学
  8. canvas :五角星的代码实现
  9. adb命令刷机vivox20_vivo手机如何双清?vivo双wipe刷机教程
  10. day2.数据类型的操作和方法
  11. 2020.7.24 T3终章-剑之魂(jz暑假训练day9)
  12. android 首页里布局,android复杂首页布局
  13. SWUST OJ 980
  14. TIOBE 1 月编程语言:Python 摘得 2020 年度编程语言
  15. bitcode 是什么_dictate什么意思
  16. 微软学术搜索的新功能设想:用户账户系统——史经浩
  17. 【开发日志-已归档】2021-11
  18. 国内程序员的Linux开发平台-Deepin
  19. 9位投资者的成功逻辑
  20. CT值到灰度值的映射, 以及windowing中的窗宽和窗位

热门文章

  1. linux之CDN内容分发网络
  2. linux下传输ts流,FFmpeg安装(Linux)以及MP4转码为ts和m3u8
  3. pyechart基本绘图(python)
  4. springboot拦截请求路径_springboot之路径拦截器
  5. uvm中sequence和virtual sequence中objection的控制
  6. 基于查表法的永磁同步电机MTPA-MTPV控制仿真模型,查表法,最大电流弱磁控制
  7. 室内打灯之射灯及灯罩
  8. uni-app开发小程序中的历史记录
  9. 二、Oracle命令行创建数据库
  10. 透过OpenStack Ocata贡献排名看中国力量强势崛起