1、目录目录一、JProfiler基本介绍二、JProfiler的主要功能模块介绍三、JProfiler对本地tomcat的监控四、JProfiler对远程tomcat的监控五、JProfiler对本地websphere的监控六、JProfiler对远程websphere的监控七、与IDE的集成八、实战操作演练JProfiler基本介绍基本介绍lJProfiler 是一个著名的用于 java 系统监控分析的软件,功能很强大,可以监控普通的java application, applet,java web start,application server等等。lJProfiler通过实时监视系统的内
2、存使用情况、垃圾回收情况和线程运行状况,从而很好的监视JVM运行情况及其性能。 l除了可以监控本地的程序,还可以对远程服务器上跑的应用进行监控。JProfiler基本介绍基本介绍lJProfiler直觉式的 GUI 可以让用户通过视觉上的观察,可以查看当前应用的对象、对象引用、内存、CPU使用情况、线程、线程运行情况(阻塞、等待等),同时可以查找应用内存使用的热点、即:哪个对象占用的内存比较多;或者CPU热点,即:哪个方法占用CPU资源比较多。这样就能方便的找到瓶颈和内存漏失等问题。JProfiler的功能模块的功能模块l内存视图(Memory Views)l堆遍历(Heap Walker)l
3、CPU视图(CPU Views )l线程视图(Thread Views )l监视器视图(Monitor Views )lVM遥感勘测技术(VM Telemetry Views )JProfiler的功能模块的功能模块n内存视图(Memory Views) JProfiler 的内存视图部分可以提供动态的内存使用状况更新视图和显示关于内存分配状况信息的视图。所有的视图都有几个聚集层并且能够显示现有存在的对象和作为垃圾回收的对象。 内存视图内存视图JProfiler的功能模块的功能模块n内存视图 (Memory Views)所有对象 :显示类或在状况统计和尺码信息堆上所有对象的包。你可以标记当前值
4、并显示差异值。 记录对象(Record objects) :显示类或所有已记录对象的包。你可以标记出当前值并且显示差异值。 分配访问树(Allocation call tree):显示一棵请求树或者方法、类、包或对已选择类有带注释的分配信息的J2EE组件。 分配热点(Allocation hot spots) :显示一个列表,包括方法、类、包或分配已选类的J2EE组件。你可以标注当前值并且显示差异值。对于每个热点都可以显示它的跟踪记录树。JProfiler的功能模块的功能模块n堆遍历(Heap walker) 在JProfiler的堆遍历器(Heap walker)中,你可以对堆的状况进行快照
5、并且可以通过选择步骤下寻找感兴趣的对象。堆遍历器包括五个视图,如下:堆遍历(堆遍历(Heap walkerHeap walker) JProfiler的功能模块的功能模块n堆遍历 Heap walker类Classes:显示所有类和它们的实例。 分配Allocations:为所有记录对象显示分配树和分配热点。 索引References:为单个对象和“显示到垃圾回收根目录的路径”提供索引图的显示功能。还能提供合并输入视图和输出视图的功能。 数据Data:为单个对象显示实例和类数据。 时间Time:显示一个对已记录对象的解决时间的柱状图。JProfiler的功能模块的功能模块nCPU视图(CPU
6、Views) JProfiler 提供不同的方法来记录访问树以优化性能和细节。线程或者线程组以及线程状况可以被所有的视图选择。所有的视图都可以聚集到方法、类、包或J2EE组件等不同层上。CPU视图部分包括: CPUCPU视图(视图(CPU ViewsCPU Views) JProfiler的功能模块的功能模块nCPU视图(CPU Views)访问树Call tree:显示一个积累的自顶向下的树,树中包含所有在JVM中已记录的访问队列。JDBC,JMS和JNDI服务请求都被注释在请求树中。请求树可以根据Servlet和JSP对URL的不同需要进行拆分。 热点Hot spots:显示消耗时间最多的
7、方法的列表。对每个热点都能够显示回溯树。该热点可以按照方法请求,JDBC,JMS和JNDI服务请求以及按照URL请求来进行计算。 访问图Call graph :显示一个从已选方法、类、包或J2EE组件开始的访问队列的图。JProfiler的功能模块的功能模块n线程视图(Thread Views) 线程历史Thread history:显示一个与线程活动和线程状态在一起的活动时间表。线程监控 Thread monitor:显示一个列表,包括所有的活动线程以及它们目前的活动状况。 死锁探测图表Deadlock Detection:显示一个包含了所有在JVM里的死锁图表。 目前使用的监测器Curre
8、nt monitor useage:显示目前使用的监测器并且包括它们的关联线程。 历史检测记录 History usage history:显示重大的等待事件和阻塞事件的历史记录。 监测使用状态 Monitor usage statistics:显示分组监测,线程和监测类的统计监测数据。线程视图(线程视图(Thread Views)Thread Views)JProfiler的功能模块的功能模块n监视器视图(Monitor Views)JProfiler的功能模块的功能模块nVM遥感勘测技术(VM Telemetry Views)堆 Heap:显示一个堆的使用状况和堆尺寸大小活动时间表。 记录
9、的对象 Recorded objects:显示一张关于活动对象与数组的图表的活动时间表。 垃圾回收 Garbage collector:显示一张关于垃圾回收活动的活动时间表。 类 Classes:显示一个与已装载类的图表的活动时间表。 线程 Threads:显示一个与动态线程图表的活动时间表。 VMVM遥感勘测技术遥感勘测技术(VM Telemetry(VM Telemetry Views)Views)JProfiler对本地对本地tomcat的监控(的监控(windows平台)平台)n前提条件安装好tomcat并配置好环境变量。安装好JDK并配置好环境变量,JDK版本最好是1.6版本的,如果
10、是1.5及以下版本,可能会不支持中文目录 。 JProfiler对本地对本地tomcat的监控(的监控(windows平台)平台)n操作步骤1、点击工具栏上的Start Center,然后点击New Session标签,如图所示: JProfiler对本地对本地tomcat的监控(的监控(windows平台)平台)2、点击Integration Wizards下的New Server Integration,打开Integration Wizards页面,选择tomcat的版本,这里选择Apache Tomact 6.x(如果是带有tomcat6.exe的版本,则选择Apache Tomact
11、 6.x (with tomcat6.exe )),然后点击Next按钮,(注意:如果是64位的JVM,则需要勾选上“64 bit JVM”)JProfiler对本地对本地tomcat的监控(的监控(windows平台)平台)3、在The profiled application is located下选择On this computer,点击Next,如图:JProfiler对本地对本地tomcat的监控(的监控(windows平台)平台)4、选择JVM提供商、版本和模式,JVM Vendor选择Sun,Version选择1.6.0,Mode选择默认值hotspot,点击Next,JProf
12、iler对本地对本地tomcat的监控(的监控(windows平台)平台)5、在Startup mode下选择第二项,即Startup immediately,connect later with the JProfiler GUI,点击Next,如图:JProfiler对本地对本地tomcat的监控(的监控(windows平台)平台)6、在Locate the start script,点击浏览,选择tomcat的启动脚本,如startup.bat,点击Next按钮,(注意: startup.bat 一般位于bin目录下);JProfiler对本地对本地tomcat的监控(的监控(windo
13、ws平台)平台)7、选择默认端口8849,点击 Next,然后继续点击Next;8、选择Yes,start the session and wait for the application server,然后点击Finish,9、然后在Session Startup页面上勾选上Record CPU data on startup和 Record allocations on startup两个复选框,点击OK按钮,对本地tomcat的配置完成,如图JProfiler对本地对本地tomcat的监控(的监控(windows平台)平台)JProfiler对本地对本地tomcat的监控(的监控(win
14、dows平台)平台)特别注意: jprofiler对tomcat的监控配置完成以后,会自动在tomcat的bin目录下产生一个startup_jprofiler.bat文件,在监控之前,必须启动该批处理文件而不是startup.bat,才能实现对tomcat的成功监控,切记!JProfiler远程远程tomcat的监控(的监控(windows平台)平台)n前提条件 远程服务器已安装好JProfiler软件; 远程服务器已安装好JDK并配置好环境变量。远程服务器已安装好tomcat并配置好环境变量JProfiler对远程对远程tomcat的监控(的监控(windows平台)平台) 操作步骤跟监控
15、本地tomcat的步骤基本差不多,主要有以下几个地方不同,需要注意一下:1、在第二步选择服务器的位置时应该选“远程机器”,如图JProfiler对远程对远程tomcat的监控(的监控(windows平台)平台)2、在第五步需要输入的是远程服务器的地址,如图:JProfiler对远程对远程tomcat的监控(的监控(windows平台)平台)3、在第六步时需要指定远程服务器上jprofiler的安装目录,如:F:jprofiler。JProfiler对远程对远程tomcat的监控(的监控(windows平台)平台)4、在第七步“locate the start script”,需要将远程服务器上
16、的startup.bat文件拷到本地,点击浏览按钮并选中它,点击确定,如图:对本地对本地websphere的监控(的监控(windows平台)平台)n前提条件 本地已安装好websphere6;对本地对本地websphere的监控(的监控(windows平台)平台)n操作步骤1、点击工具栏上的Start Center,然后点击New Session标签,如图所示: 对本地对本地websphere的监控(的监控(windows平台)平台)2、点击Integration Wizards下的New Server Integration,打开choose integration Wizard页面,选择
17、websphere的版本,这里选IBM websphere6.0 application server,如图所示;对本地对本地websphere的监控(的监控(windows平台)平台)3、在The profiled application is located下选择On this computer,点击Next,如图:对本地对本地websphere的监控(的监控(windows平台)平台)4、选择JVM提供商、版本和模式,都选择默认值不要改变,点击Next,对本地对本地websphere的监控(的监控(windows平台)平台)5、在Startup mode下选择第二项,即Startup i
18、mmediately,connect later with the JProfiler GUI,点击Next,如图:对本地对本地websphere的监控(的监控(windows平台)平台)6、在第五步locate config file里选定server.xml文件,然后点击next,(注意:该文件一般位于profilesAppSrv01configcellstalkweb-testgd11122Node01Cellnodestalkweb-testserversserver1目录下),如图所示:对本地对本地websphere的监控(的监控(windows平台)平台)7、在第六步locate
19、the start script里选定startServer.bat,然后点击next,(注意:该文件位于bin目录下)对本地对本地websphere的监控(的监控(windows平台)平台)8、选择默认端口8849,点击 Next,然后继续点击Next;9、选择Yes,start the session and wait for the application server,然后点击Finish,10、然后在Session Startup页面上勾选上Record CPU data on startup和 Record allocations on startup两个复选框,点击OK按钮,对本
20、地websphere的配置完成。对本地对本地websphere的监控(的监控(windows平台)平台)特别注意: 在配置之前一定要把websphere的服务停掉,如果是注册为windows服务的话,需要把该服务停掉并将其属性设置为“禁用”。对远程对远程websphere的监控(的监控(windows平台)平台)n前提条件:远程机器已安装好websphere6.0 ;远程机器已安装好jprofiler6.对远程对远程websphere的监控(的监控(windows平台)平台)操作步骤跟监控本地websphere的步骤基本差不多,主要有以下几个地方不同,需要注意一下:1、在第二步选择服务器的位置
21、时应该选“远程机器”,如图对远程对远程websphere的监控(的监控(windows平台)平台)2、在第五步需要输入的是远程服务器的地址,如图:对远程对远程websphere的监控(的监控(windows平台)平台)3、在第六步时需要指定远程服务器上jprofiler的安装目录,如:F:jprofiler,对远程对远程websphere的监控(的监控(windows平台)平台)4、在第七步时需要指定配置文件的同步方式,这里选第二种方式,如图所示:对远程对远程websphere的监控(的监控(windows平台)平台)5、第八步locate config file,需要把远程机器上的配置文件拷
22、贝到本机,然后选定它,点击确定,然后点击next,对远程对远程websphere的监控(的监控(windows平台)平台)6、第九步locate start script,也需要把远程机器上的startServer.bat文件拷贝到本机,选定它然后点击确定,对远程对远程websphere的监控(的监控(windows平台)平台)注意注意:如果远程连接不成功,请检查:1、本地和监控机是否都安装了JProfiler,版本是否相同;2、本地和监控机的端口是否一致,最好都使用默认的8849端口;3、所选JVM的提供商和版本是否一致,可能机器上有多个JAVA版本,一定要选择应用程序启动时所用的;4、应用
23、目录必须可写共享,监控机需要映射共享目录,配置完成后在本地机器上会生成JProfiler监控的启动文件。与与IDE的集成的集成可以与Eclipse集成;可以与Jbuilder集成;可以与IBM WASD和IBM RAD集成;可以与Oracle JDeveloper集成;与与IDE的集成的集成n以与Eclipse3.2的集成为例(注意:执行集成之前需要关闭Eclipse!)操作步骤:1、点击主菜单 Session IDE Intergrations 与与IDE的集成的集成2、选择Eclipse的版本,这里以3.2版本为例,如图所示:与与IDE的集成的集成3、点击“Integrate” ,选择Ec
24、lipse所在的文件夹。如:D:apache-tomcat-6.0.32eclipse,点击确定;4、以D:apache-tomcat-6.0.32eclipseeclipse.exe clean 方式启动eclipse(目的是清除插件缓存,仅需第一次加此参数); 与与IDE的集成的集成5、在Eclipse里配置JProfiler 点击主菜单WindowCustomize PerspectiveCommands ,找到Profile ,选中它,再点OK即可,如图所示:与与IDE的集成的集成6、运行测试,选择你要测试的系统的主类,右击profile as-Java Application运行即可
25、。 实战操作演练实战操作演练(一)、任务目标:找出项目中内存增大的原因。实战操作演练实战操作演练(二)、配置说明操作系统:WindowsXPWeb容器:Tomcat6.0.32JDK版本:Sun JDK1.6.0监控类型:本地Jprofiler安装路径:C:ProgramFilesjprofiler6Tomcat安装路径: D:apache-tomcat-6.0.32apache-tomcat-6.0.32实战操作演练实战操作演练(三) 、 测试项目1、新建WEB项目test2、建包cn.test3、在该包下建类文件TestMain.java 和 TestBean.javapackage cn
26、.test;public class TestBean String name = ;public static void main(String args)System.out.println(test); 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、init
27、2.jspInit1.jsp(每次执行都创建1万个TestBean对象) init %for(int i=0;iSIZE:counter: 注:Init2.jsp和init1.jsp一模一样即可(后面有用)。实战操作演练实战操作演练(四) 、配置测试用例具体操作:略实战操作演练实战操作演练(五)、开始测试1、在IE地址栏中输入:http:/localhost:8080/test/init1.jsp,执行一次,我们可以在内存视图中看到cn.test.TestBean对象被创建了10000次,如下图所示:实战操作演练实战操作演练实战操作演练实战操作演练2、标记现在的状态,然后再执行init1.js
28、p和,init2.jsp可以让我们找到哪些类在调用后没有被释放(很重要!)实战操作演练实战操作演练刚才执行了4次init1.jsp和1次init2.jsp,正好产生了50000个TestBean对象,和图示显示的一样(注:红色的变成是发生变化的对象及其数量)实战操作演练实战操作演练3、过一会后,按F4键进行垃圾回收。但回收完成后,这些对象依然存在,说明某些地方对这个类的引用没有被释放!4、找出是哪些地方使用了TestBean类,并且没有释放它们。在cn.test.TestBean对象上点击右键选择“Show Selection in Heap Walker”, 然后点击确定,观察它的heap,实战操作演练实战操作演练实战操作演练实战操作演练Heap状态如图所示:实战操作演练实战操作演练5、在该类中点击右键,在出现的菜单中选择“Use Selected Instances”,实战操作演练实战操作演练6、出现如下窗口:实战操作演练实战操作演练7、选择”Allocations”,点击“OK”,然后我们要的结果就出来了。图中显示调用此类的地方是init1.jsp和init2.jsp,并且各自占用的比率都列出来了。 既然问题的所在找出来了,接下来就该去解决问题了!致谢致谢