本文主要讨论IBM相关JVM诊断工具的使用,并结合具体应用给出示例。
随着信息技术的不断发展,计算机在各行各业得到越来越广泛的应用,应用系统结构也越来越复杂和庞大,系统的性能问题已经成了系统发挥效率的关键所在,通常处理这些问题都是软件开发人员根据其以往的开发经验,设计的好坏受人为因素影响很大,且方案因人而异。一般来说,一个系统存在瓶颈是必然的,不可能完全消除,但是合理的进行瓶颈定位,并对性能进行优化将能极大的提高系统的效率。
Java由于其具有跨平台的先天优势,以及对Web的良好支持,在分布式应用尤其是异构环境中成为首选,因此目前基于J2EE的应用与基于微软.net平台(和windows的近亲关系、及其集百家之长的特性决定了其优势)的应用已形成二分天下之势,其他语言或者平台的应用相对较少,大部分只能在两大阵营中漏下的市场中分得一杯羹。本节并不打算讨论哪种语言或者平台孰优孰劣,技术的发展日新月异,谁也不能保证是最后的王者。本节主要介绍IBM提供的相关Java诊断工具的用法:
在IBM官方网站上,我们找到了如下表所示的J2EE诊断工具,严格来说它们是JVM工具,IBM也是这样归类的,包括但不限于对Websphere服务器的性能诊断:
表一:IBM常用JVM诊断工具
虽然网上提供了各种工具的单独下载,但是笔者建议采用IBM Support Assistant(目前的最新版本是V4.1),它是IBM提供的一款免费的桌面应用程序,集成了包括工具在内的所有功能,可简化 IBM 软件的故障诊断工作(通过自助方式或在技术支持协助下进行),IBM Support Assistant 提供了四个重要功能,用于进行自助故障诊断或利用 IBM 支持流程:
-
搜索 (Search):IBM 支持信息包含在 IBM“知识天堂”的多个位置。有时候,已经提供了关于某个问题或操作问题的回答,但尚不能访问。IBM Support Assistant 搜索组件提供简单易用的界面,可搜索很多不同的知识库,从而能更方便地找到所需要的信息。
-
产品信息 (Product information):通过此组件,可快速访问您所感兴趣的 IBM 产品的支持资源。所列出的支持资源由 IBM 支持团队亲手挑选,可作为提高技术和进行故障诊断的信息工具使用。
-
工具 (Tools):IBM Support Assistant 还提供了用于访问多个免费故障诊断和诊断工具的框架。这些工具不仅能帮助您使用 IBM 产品,还能够帮助您处理自己的应用程序。
-
服务 (Service):此组件可帮助您在与 IBM 支持交互时利用其支持流程。
下面介绍如何获得IBM Support Assistant帮助:
1、 进入IBM下载页面http://www-01.ibm.com/software/support/isa/:
2、 点击“Download”进入下载页面:
3、 这里提供了Serviceability Workbench和Enterprise Solution两个版本的下载,其中后者提供了远程问题收集解决功能,这里我们选择Serviceability Workbench,点击“Download”进入下载页面(注意IBM需要提供一个IBM帐号进行登陆,没有帐号可以在线注册):
4、 目前V4.1版提供了Linux 和Windows两个版本的下载,请根据需要选择,这里我们选择Win32版本的,选择isa.wb.410-win32.zip下载:
5、 下载到本地后解压,文件如下:
6、 运行setupwin32.exe
就可以开始安装了(注:IBM Support Assistant以及后面的相关工具是采用纯Java编写的,需要Java运行时环境支持,请确保机器上已预装JRE,经验证V4.1支持Java5.0及以上版本),安装成功后,首次运行的IBM Support Assistant面板如下,下次启动可以选择“启动活动”标签,选择相关功能即可:
7、 在以上的“主页”标签页中可以直观的看到,IBM Support Assistant提供了以下三个主要功能:
查找信息:轻松查找您需要的信息,包括特定于产品的信息和搜索功能;
分析问题:通过可维护性工具、一组诊断工件和通过问题确定提供的指导来诊断和分析问题;
收集和发送数据:使用自动数据收集来收集问题确定文件。使用这些文件进行自助问题确定,或者使用“服务请求”功能将这些文件随服务请求一起发送给 IBM。
8、 本节并不打算详细的介绍IBM Support Assistant的使用,更详细的信息请参考ibm.com 主页及支持主页的链接,下面主要介绍怎样获得最新的IBM工具以及如何使用。从检索工具开始,以工具“IBM Thread and Monitor Dump Analyzer”为例,IBM Support Assistant支持两种方式进行检索,第一种是直接通过“查找信息”来检索:
这种方式检索出了IBM和搜索词“IBM Thread and Monitor Dump Analyzer”相关的所有资源,当然也包括相关的文档以及Demo,笔者不建议使用这种方式,在列出的大量信息中查找工具是件极费时的事情,若是只检索工具可以采用如下方式,在面板中选择 更新–->查找新的...-->工具加载项(若是已经下载过工具,可以选择“查找对加载项的更新”选项,若是要对已下载的工具进行其他管理可选择“管理已安装的加载项”),将会列出目前IBM提供的所有工具:
9、 搜索到的工具如下:
10、 选择需要的工具“IBM Thread and Monitor Dump Analyzer”,下一步:
11、 下一步,选择“接受许可协议”:
12、 点击“完成”,开始安装工具到本地:
13、 点击“完成”,完成安装,其他工具的安装步骤和以上步骤类似。(需要重启IBM Support Assistant工作台):
14、 选择“分析问题”,找到我们刚刚安装的工具:
15、 在工具列表中选择“IBM Thread and Monitor Dump Analyzer”,可以看到描述里给出了该工具的简单介绍:“IBM Thread and Monitor Dump Analyzer for Java allows identification of hangs, deadlocks, resource contention, and bottlenecks in Java threads. This tool is a tech preview.”单击“启动”按钮,启动后的“IBM Thread and Monitor Dump Analyzer”工具如下:
实际上,工具都是以Java Application的方式运行的,如果不通过IBM Support Assistant工作台启动,可以直接在命令行采用”java –jar –jca37.jar”命令运行,效果是一样的。
16、 要分析问题,我们需要获得系统某个状态时的内存信息(一般会是系统即将宕机或者系统服务性能下降的情况),也就是内存转储或者java堆转储,以HP-UX为例(注意:Websphere在该系统上使用IBM java虚拟机才支持自动转储,这里我们采用手动转储,在IBM官方网站中有这样的描述:生成堆转储时会严重影响 WebSphere Application Server 的性能,请确定你确实需要这样做来找出问题),通过调用generateHeapDump来手动生成堆转储,输出文件:native_stdout.log。
这里介绍IBM Websphere的手动生成方式:
启动 wsadmin 脚本客户机。 要运行脚本命令,您有多个选项,这些选项包括以交互方式运行脚本命令以及在概要文件中运行脚本命令。例如,对 JVM MBean 调用 generateHeapDump 操作
查找 JVM objectName:
<wsadmin> set objectName [$AdminControl queryNames
WebSphere:type=JVM,process=<servername>,node=<nodename>,*]
对 JVM MBean 调用 generateHeapDump 操作:
<wsadmin> $AdminControl invoke $objectName generateHeapDump
其中:
$
|
是使用其值替换变量名的 Jacl 运算符
|
invoke
|
是命令
|
generateHeapDump
|
是要调用的操作
|
<servername>
|
是服务器的名称,将在该服务器上生成堆转储
|
<nodename>
|
是 <servername> 所属的节点
|
这样是从Websphere生成内存转储,而不是直接java内存转储,使用工具时请注意工具所支持的文件格式(参考表一)。
17、 故障诊断与定位,使用“IBM Thread and Monitor Dump Analyzer”打开java堆转储日志文件native_stdout.log,该工具支持Thread 和 Monitor两种模式查看,在某个项目中,我们发现了存在大量的进程等待,如下图:
18、 结论:经过分析,绝大多数的等待发生在同一个地方:ArrayList,难道是List()存在问题,继续跟踪,发现都这些等待都使用的是RMI方式通信,不难想象,是某种远程调用,而问题表现的恰恰是因为大量的远程调用中出现了线程等待,结合该项目的特点,我们发现,该项目的部署方式为,WEB模块+EJB模块,而两者分开部署,虽然这种方式更适合分布式的应用。问题就出在这,调用EJB时采用了大量的远程接口调用,根据EJB规范,远程调用时对象的传递需要进行序列化,正是这种序列化造成了大量的等待。
19、 建议:根据以上分析,我们找出了影响其性能的一个主要原因,WEB模块与企业逻辑EJB之间的通信存在问题,EJB2.0为了提高性能开始支持Local方式的EJB,但是LocalEJB和RemoteEJB的实现方式和调用方式都是不一样的(配置也不一样,可以通过程序自适应),RemoteEJB是通过RMI方式调用的,对象传递需要序列化,而LocalEJB是通过对象引用传递的,没有序列化,性能会高很多。所以针对该问题,建议尽量调用EJB的本地接口。该诊断最终获得客户认可,对系统的重新优化后,性能有了明显提高。
20、 以上仅仅从工具方面分析了项目中可能遇到的瓶颈问题,实际上,正如前面所说,一个完全不存在瓶颈的系统是不存在的,在这个项目中,我们实际上还发现了其他问题:比如配置的问题,对应用服务器、数据库的配置问题;另外,针对数据库的SGA命中率低的问题,我们给出了一些SQL的优化建议,这些都得到了客户的认可。
|
相关推荐
### IBM之Java性能诊断工具初探—IBM Support Assistant的使用 #### 一、引言 随着信息技术的飞速发展,企业级应用系统变得越来越复杂,性能优化成为了保证系统高效稳定运行的关键因素之一。Java作为跨平台的语言...
第一章 Java语言概述.ppt 第二章 Java 编程基础.ppt 第三章 Java 核心 API的包.ppt 第四章 软件开发周期简介.ppt 第五章 Java语言的类和对象.ppt 第六章 面向对象程序设计基础.ppt 第七章 面向对象编程的高级概念....
C#的这些特点,使得复杂的疲劳分析工作变得简单和高效,使工程师能够更加专注于工程问题本身,而非工具的使用。 "SN Curve Assistant"的出现,对工程设计领域尤其是那些需要精确评估疲劳寿命的项目来说,是一个具有...
《美少女桌面助手:探索Windows界面编程之美》 在当今数字化时代,用户界面(UI)的设计与实现成为软件产品能否吸引用户的重要因素。本篇将深入探讨"Beautiful-girls-assitant.rar"这一压缩包中的"美少女桌面助手...
V-ASSISTANT是一款专门用于西门子伺服驱动器的调试和诊断工具,它提供了直观的用户界面和丰富的功能,使得调试过程更加便捷高效。 1. **硬件准备**: - 首先,确保DC24V电源以及进线电源正确接通,这是驱动器工作...
IntelliJ IDEA是一款广受欢迎的Java开发集成环境,由JetBrains公司开发。SpringAssistant是针对IntelliJ IDEA设计的一款插件,旨在提升Spring框架的开发效率。2021.8.23发布的"intellij-spring-assistant-1.0.2.zip...
1)通过HACS安装最新的证卡工具(前提条件) 在HACS中搜索card-tools插件并安装。 这在默认的HACS社区商店中可用。 2)通过HACS安装辅助信息实体行 在HACS中搜索secondaryinfo-entity-row插件并安装。 3)更新...
总结,VC6_Access_Assitant是VC6开发环境下操作Access数据库的一个实用工具,它通过封装ADO接口降低了数据库操作的复杂性。通过学习和应用CDBAAssistant类,开发者可以更轻松地完成数据库的读写、查询和管理任务,...
《Dota-Assitant-Android: 刀塔助手的开发与应用》 在移动游戏领域,Dota(刀塔)作为一款极具竞技性的多人在线战斗游戏,吸引了大量的玩家。随着技术的发展,许多玩家开始寻求更便捷的游戏辅助工具,以提升游戏...
VC++助手很好用的比我刚才下载的好多了!
为了验证模组及开发板性能,文档5有两个固件: 1是透传固件由四博智联开发,通过CozyLife 使用蓝牙配置上网,透传到数据到tcp server、tcp client、udp server、udp client等; 2是AT固件,为乐鑫官方开发。 3 是...
### SQLAssistant 使用说明 #### 关于本指南 本指南旨在为用户提供有关 SoftTree SQLAssistant 的全面介绍,包括其主要功能、使用方法以及如何连接至多种数据库系统等实用信息。 #### 目标受众 本指南主要面向...
名称:AliPrice中国进口购物助手 ---------------------------------------- ...IOS:https://apps.apple.com/cn/app/aliprice-aliexpress-assitant/id1282323896 Firefox/Opera:https://www.aliprice.com?extension
SINAMICS V-ASSISTANT是一款由西门子公司推出的专用调试工具,主要用于V90伺服驱动器的安装、配置和故障诊断。该软件是V90伺服系统中不可或缺的一部分,它提供了直观的用户界面和丰富的功能,使得伺服驱动器的调试...
Keil Assistant简述 :bookmark_tabs:vscode 上的 Keil 辅助工具,与 c/c++ 插件配合使用.能够为 Keil 项目提供 语法高亮、代码片段 的功能,并支持对 keil 项目进行 编译、下载。仅支持 Keil uVison 5 及以上版本仅...
### Cisco Network Assistant 5.0 – 关键知识点 #### 新特性 Cisco Network Assistant (CNA) 5.0 及以上版本提供了丰富的功能更新与改进,以下为几个...对于网络管理员和工程师来说,这是一款不可或缺的强大工具。
在“Research-Assitant-ML-ROJ-main”这个压缩包子文件的文件名称中,"main"可能指的是主目录或主脚本,这可能包含了整个项目的源代码、数据集、配置文件以及其他相关资源。 综上所述,这个项目是关于利用机器学习...
对于VC++10来说,最好的代码辅助工具就是番茄插件 Tomato Visual Assitant,用它可以提高查看代码和编写代码的速度。
PLL设计assitant ,从M.H.Perrott ,麻省理工学院
例如,当用户遇到网络连接问题时,可以使用工具捕获和分析数据包,查找是否存在丢包、乱序、超时等问题;在服务器优化中,可以监测TCP连接的状态,分析是否有异常的关闭或者慢速启动现象;在安全审计中,可以检查...