使用IBM Support Assistant找出企业应用程序解决性能问题的模式

在本文中,作者通过介绍三个基于实际情况的">案例研究,分享了有关检测和诊断在生产和开源基准应用程序中的性能问题的经验。这些案例研究强调了如何配合使用 Garbage Collection and Memory Visualizer (GCMV) 和 IBM Monitoring and Diagnostic Tools for Java - Memory Analyzer (MAT) 等各种 IBM® 工具,这些工具通过分析详细的垃圾收集日志、堆转储和线程转储,可共同用于诊断复杂的性能问题。

权威支持在每个专栏中讨论 WebSphere® 产品可用的 IBM® Technical Support 的资源、工具和其他元素,以及可以进一步增强您的 IBM 支持体验的技术和新观念。

组合工具和经验

生产级的多层次企业 Java 应用程序的问题确定和性能调优被认为是非常艰巨的任务。幸运的是,有许多诊断工具可以用来检测这类问题的根源。在本文中,我们通过介绍三个基于实际情况的案例研究,分享了有关检测和诊断在生产和开源基准应用程序中的性能问题的经验。这些案例研究涵盖了一系列的性能问题:

由于基础架构代码中的内存泄漏造成不可用性 由于错误的开发代码造成系统 CPU 使用率高 因不正确的运行时策略和调优而加剧的应用程序设计问题,造成 CPU 和内存使用率高。

每个案例都提出问题,以及使用 Garbage Collection and Memory Visualizer (GCMV) 和 IBM Monitoring and Diagnostic Tools for Java - Memory Analyzer (MAT) 等 IBM 工具,通过分析详细的垃圾收集 (GC) 日志和 heapdump 解决问题的方式。这些案例研究强调了与企业 Java 应用程序的问题确定和性能分析有关的复杂性。这里介绍的所有工具都作为 IBM Support Assistant 工作台 中的插件提供。

案例研究 1:基础架构代码中的内存泄漏

我们的第一个案例研究涉及一个开源基准,其名称为 RUBiS。RUBiS 模拟一个拍卖网站。它配备了自己的工作负载驱动程序,并且有一个 Web 层连接到一个数据库层。在有关性能评估的研究论文中已大量引用它。

当使用 RUBiS 作为我们进行其他研究的一个基准时,我们注意到,RUBiS 在实验结束时会停止响应,并且必须重新启动才可以进行下一个实验。我们正在使用 servlet 版本的 RUBiS 和 MySQL JDBC 驱动程序。我们使用 GCMV 对 100 个客户端的恒定负载分析了该应用程序详细的 GC 日志。通过 Java 命令行或通过对大多数商用应用服务器的管理用户界面,可以很容易地启用详细的 GC 日志。结果显示,即使在恒定负载(参见图 1)的情况下,所使用的堆也始终在不断增长。这似乎是一个典型的内存泄漏问题。然而,我们发现,该内存泄漏的根本原因并没有像大部分经典的内存泄漏那么明显。

图 1. GCMV:在恒定负载的情况下,RUBiS 堆的使用量在不断增长

对于内存泄漏分析,最好先了解一些基本定义:

Shallow size,一个对象的 Shallow
大小是指用于存储对象本身所分配的内存量,没有考虑到所引用的对象。 Retained size,一个对象的 Retained 大小是其 Shallow 大小加上只可以从该对象直接或间接访问的对象的 Shallow 大小。 Retained set 为 X,如果 X 是被收集的垃圾,那么 Retained 集所代表的一组对象就将是被收集的垃圾。 Dominator tree 是一个转换,将循环的对象图转换成 Keep-Alive 树,树中的每个节点直接负责保持其子节点的活动状态。

我们首先使用 MAT 在几分钟内在恒定负载条件下提取此应用程序的两个堆转储,并比较它们。在大多数商用应用服务器中都可以很容易地启用堆转储。快速浏览一下在这两个堆转储中的对象计数,可以使我们注意到一组已经比原始数量和大小增长了近两倍的对象。这些对象大多是原始类型,但增长得最多的那些与 JDBC 中的 PreparedStatement(这种对象的数量在第一个和第二个堆转储之间几乎翻了一番)调用相关。图 2 显示了增长最多的对象的快速分解。在大多数内存泄漏中,有一些容器对象的大小增长最多,而另一些对象类型则是计数的增长最多。

时间: 2024-09-27 03:18:49

使用IBM Support Assistant找出企业应用程序解决性能问题的模式的相关文章

使用IBM Support Assistant监控CICS JVM Server

Java程序的内存泄露有可能跟其它非Java语言程序的内存泄露一样产生严重的后果.虽然Java有垃圾回收 器,但是被引用的对象有时候不能被垃圾回收器回收.因此,要解决Java程序的内存泄露,首先需要定位内存 泄露,然后识别出导致内存泄露的类.本文以一个运行在CICS JVM服务器中的示例Java程序来展示如何定位内 存泄露并识别出导致内存泄露的类. 介绍 内存管理是Java的优势之一.当用Java语言创建的对象的内存不再需要时,垃圾回收器(GC)会重新使用 这些内存,这使得内存管理变得很简单.但

三个关键命令找出ASP.NET程序内存分片的原因

最近一位朋友的ASP.NET程序怀疑有内存泄露问题.几个简单的页面,起来运行几分钟后,虚拟内存就到600多MB.从性能监视上看,private bytes只有200多MB. 这样的问题从经验上来说,十有八九都是内存碎片了.ASP.NET程序发生内存碎片的原因比较多,我常见的有: 1.Web.config中的debug=true,导致batch compilation=false,使得每一个ASPX页面都生成一个临时assembly.当页面比较多的时候,大量的assembly导致内存泄露. 2.程

如何解决Win7弹出找不到应用程序解决方法

  我们在用电脑的过程中很可能会出现弹出的窗口显示找不到应用程序,其实在很多的最新win7系统下载使用的用户中都会遇到,在出现这样的情况下一般情况都是我们在安装了一些软件或者是某种应用程序出现了错误,然后导致我们的应用程序无法启动,我们怎么来解决这个问题呢,不妨试试以下的解决方式. win7系统桌面出现提示找不到应用程序的窗口解决步骤: 出现这样的情况可能是因为我们的程序被误删的可能,我们点击鼠标的右键然后在菜单中看中间是否有之前我们删除的程序是否还有残留的程序,如果说有的话就会导致出现这样的情

如何找出企业内部的“暗数据”?

在自然界中有一种物质叫做"暗物质",从物理学家的解释来看,"暗物质"是自然界当中最充满能量的部分,如何发挥"暗物质"的作用是当代自然科学研究的话题.而在数据科学领域,人们都在讨论如何发掘隐藏在企业内部和整个互联网上巨量的"暗数据",怎样发挥"暗数据"的价值. 有一种说法,人类只要利用大脑的 10%,就可以实现长生不老.即便在无数神经学家将其斥为胡编乱造的无稽之谈,多年以后,我们还是不会放弃这种念头,因为我们

企业CEO,要成功,找出你互联网商业模式中的亮点

企业CEO,要成功,找出你http://www.aliyun.com/zixun/aggregation/9899.html">互联网商业模式中的亮点 在国内,有很多的网站都在模仿抄袭外国成功网站的模式, 但是,就算是这样,也要找出自己独 有的亮点.在 众多的网站当中,我们要给顾客及使用者的就是一个跟其他网站企业不一样的感觉及印象. 那要如何可以让自己的网站企业有自己的亮点呢?那就是要创造出自己的独有的卖点. 独有的卖点能达到的效果就是让你跟其他网站企业与众不同.在整个商业模式的规划中,这

卧底软件:帮助公司找出“内奸”

公司内部员工泄漏.盗窃.破坏公司信息已经成为了一个非常严重的网络安全问题.一家安全服务商说,它可以通过读取公司所有员工的电邮,来帮助工公司提前察觉"内部威胁". 假设你在一家大银行,或者硅谷的一家软件巨头,或者一所政府机构担任安全官员,每天早晨,你都可以用一个软件进行查询: "截至昨晚,谁是公司里最心怀不满的人呢?把前10个的名字显示出来." 埃里克·肖奥(Eric Shaw)是一名心理学家,长期在情报界担任顾问.他为网络安全公司Stroz Friedberg开发了

Exchange Server 2010学习(七)多邮箱搜索找出神秘邮件的出处

铃---.半夜中被一阵急促的手机铃声吵醒,年度服务客户打来电话需要进行邮件的排查和删除工作.问其原因,原来是组织中有人发了一封关于领导的不健康的邮件,并在企业内部进行了转发,领导要求立即找出此类邮件并进行删除.管理员深知领导的暴脾气,不敢怠慢! 其实找出有问题的邮件进行删除并不难,利用Exchange Server2010提供的多邮箱搜索功能就可以实现.此功能使用的是由 Exchange 搜索创建的内容索引,来提供对整个组织内所有或者是指定范围内的邮件内容进行搜索能力,以满足类似于法律法规等合规

快速找出php中可能导致cpu飙升问题的代码行

用cpu接近100%时,你如何找到导致cpu飙升的原因?我的思路是,首先找到进程正在执行的代码行,从而确定可能有问题的代码段.然后,再仔细分析有问题的代码段,从而找出原因. 如果你的程序使用的是c.c++编写,那么你可以很容易的找到正在执行的代码行.但是,程序是php编写的,如何找到可能有问题的代码行呢?这个问题就是本文要解决的问题. 背景知识: 大家都知道php是一个解释性语言.用户编写的php代码会生成opcode,由解释器引擎去解释执行.在解释执行过程中,有一个全局变量包含了执行过 程中用

mfc c++-新人求教,我用mfc做了一个tcp fin的端口扫描器,死后得不出结果,求大神帮忙找出问题

问题描述 新人求教,我用mfc做了一个tcp fin的端口扫描器,死后得不出结果,求大神帮忙找出问题 cpp文件 // scanDlg.cpp : implementation file// #include ""stdafx.h""#include ""scan.h""#include ""scanDlg.h""#include ""afxdialogex.h&qu