使用Websphere的TPTP工具进行性能分析和监控

时间:2024-05-21 21:27:42

Websphere提供了一个TPTP(Test & Performance Tools Platform)工具,最新版本为4.5.0,可以进行强大的性能测试和分析工具,利用它,我们可以分析java代码的内存泄露分析、查找性能瓶颈、以及定位线程死锁等。

一、准备工作

1、下载TPTP工具

Websphere提供了一个TPTP Eclipse插件,可以到下面的网站进行下载。

http://www.eclipse.org/tptp/home/downloads/

为了简便起见,建议直接下载TPTP all-in-one package,这是一个含有TPTP插件的3.4版本的Eclipse,下载后直接解压后,运行该目录下的eclipse.exe就可以直接运行。 

2、下载示例项目

为了学习插件的功能,建议下载示例项目,在该网站中,找到"TPTP Project Examples",点击"Runtime"下载示例项目。下载后解压后,分别将几个项目导入到带有TPTP插件的Eclipse的工作空间中。 

3、下载Agent Controller

Agent Controller用于监控外部的Java应用,如监控Websphere Application Server。
在下载页面找到Agent Controller,在Runtime  选择Windows IA32(windows平台的32位操作系统),按"download"按钮即可下载。
下载后,将其解压到一个,如 d:\agentcontrol 

二、进行Java程序的性能分析和监测。

下面具体来通过案例学习如何使用TPTP工具。

 1、进行内存泄露分析

以Profile方式运行Memory Leak项目的MemoryLeak类。

首先选择Window -> Open Perspective -> Profiling and Logging, 打开Profiling透视图。选择Run -> Profile configurations (也可以点击 使用Websphere的TPTP工具进行性能分析和监控 图标进行选择),打开Profile设置对话框,选择External Java Application,按 使用Websphere的TPTP工具进行性能分析和监控 按钮,增加了一项新的配置New_configuration,在main  Tab页选择Memory Leak 项目中的类MemoryLeak class文件,选择Memory Leak项目,找到MemoryLeak类并选择,如下图所示。
使用Websphere的TPTP工具进行性能分析和监控

再按"Monitor"Tab页,选择"Java Profiling--Memory Analysis",如下图所示,再按"Profile"按钮,运行应用并进行监控。 使用Websphere的TPTP工具进行性能分析和监控

该应用运行了一个Applet窗口,如下图:

  使用Websphere的TPTP工具进行性能分析和监控
 

Profile的透视图如下图所示,不断按Leak some memory或Allocate some memory按钮,可以不断增加内存中集合的Sting实例和new String实例,双击左侧视图MemoryLeak at fox,右侧实体显示内存分析结果,按Profiling视图的 使用Websphere的TPTP工具进行性能分析和监控 图标,手动刷新页面,可以看到有上、下小箭头,预示着活动的内存实例数(Live Instance)和总内存实例数(Total Instance)的增加和减少(垃圾收集造成),以及各个类占用的字节数。按Object Allocations视图的%后的三角形图标,可以看到增加量和减少量的变动值,如下图所示。 
使用Websphere的TPTP工具进行性能分析和监控

2、执行时间分析:用来分析程序的执行时间,分析性能瓶颈。

以Profile方式运行MemoryLeak类,步骤同上,在Monitor Tab页面选择"Java Profiling---Execution Time Analysis",按"Profile"按钮,弹出运行的页面。
双击左侧视图中MemoryLeak at fox的Execution Time Analysis,显示执行分析页面,如下图所示:
使用Websphere的TPTP工具进行性能分析和监控
 
点击Call Tree Tab页面,看以看到调用关系,并可视化显示出调用的时间长短,如下图所示。
使用Websphere的TPTP工具进行性能分析和监控
 
点击左侧的配置资源项的鼠标右键菜单,选择"Open With---Execution Flow",可以显示图形化的调用时间关系,用鼠标选中一个区域,可以将其放大,如下图所示:
使用Websphere的TPTP工具进行性能分析和监控
 
可以看出,这是一个很好的性能分析工具,另外还具有生成类似UML的类交互图和线程交互图的功能。

3、线程分析:可以分析出死锁和运行的历史状况。

以Profiling方式运行ThreadsDeadlock项目中的Deadlock类,Monitor选择Thread Analysis,进行Profiling监控。双击击左侧视图的DeadLock At fox,显示线程的状态,如下图所示:

  使用Websphere的TPTP工具进行性能分析和监控
 
可以看出,图中直接标明了哪些线程正在运行,哪些线程在等待、哪些线程停止、哪些线程发生了死锁。

更强大的功能还在后面,点击Threads Visualizer Tab页,可以看出线程在时间执行序列上的状态变化情况,如下图所示: 使用Websphere的TPTP工具进行性能分析和监控

时间轴从左到右,单位为 秒:毫秒,各种演示代表不同的状态:

  • 绿色为运行状态
  • 红色为死锁状态
  • 黑色为停止状态
  • 橙色为等待状态

图中显示了各个线程在不同时间段的状态变化。 

三、对WebSphere 应用服务器进行监控

TFTP不仅可以对Java程序进行监控,还可以对外部的应用服务器进行监控,如WebSphere应用服务器。

1、  设置环境变量

为了监控Websphere,需要先增加新的环境变量,直接编辑websphere的server.xml文件,笔者的配置文件如下:
D:\JavaEEServer\IBM\Websphere6.1\profiles\AppSrv03\config\cells\foxNode02Cell\nodes\foxNode03\servers\server1\server.xml
修改配置文件的jvmEntries选项的属性genericJvmArguments,如:
genericJvmArguments="-Xquickstart -XrunpiAgent"

2、  将d:\agentcontroll\bin目录下的dll文件copy到jdk的bin目录中

笔者的jdk\bin目录为
D:\JavaEEServer\IBM\Websphere6.1\java\bin (按照AgentController的readme,只设置环境变量是不能运行的,查了Sun的资料,发现可以将dll文件copy到bin目录下,这样就可以执行了)。

3、  启动Websphere。

这样,websphere上就运行了一个外部的Agent代理。

4、使用Eclipse连接Agent。

选择Run---Profile configurations,打开Profile设置对话框,选择Attach to Agent,按"+"按钮,增加一项配置,Host缺省为localhost[10002],因为是本机所以不用修改,如果要连远程集群,需要修改IP地址。点击Agent Tab页,选中Java Profiling中的三项,按"Profile"按钮进行监控。如下图所示。监控结果可以显示出内存分析、执行时间执行方法覆盖情况等信息,如下图所示。 
使用Websphere的TPTP工具进行性能分析和监控
 
监控结果可以显示出内存分析、执行时间执行方法覆盖情况等信息,如下图所示。
使用Websphere的TPTP工具进行性能分析和监控