随笔-193  评论-715  文章-1  trackbacks-0

本Blog所有内容不得随意转载,版权属于作者所有。如需转载请与作者联系( fastzch@163.com )。
未经许可的转载,本人保留一切法律权益。
一直以来,发现有某些人完全不尊重我的劳动成果,随意转载,提醒一下那些人小心哪天惹上官司。

一、关于各工具的使用,我简单的整理总结了一下,列表如下:
ga(IBM Pattern Modeling and Analysis Tool for Java Garbage Collector)  
 分析WAS产生的GC Log的工具
 
jca(IBM Thread and Monitor Dump Analyzer for Java)
 分析WAS OOM时产生的(文件名以javacore开头,后缀名为.txt
  例:javacore.20080731.200248.2324.txt)

ha(IBM HeapAnalyzer)
 分析WAS产生的Java Heap Dump的文件(文件后缀名为.phd)


二、关于在Windows上生成WebSphere的java heap dump 和 java core dump的操作,可以参考我的另一篇文章:
[转载]如何在Windows 平台获得WASv5.x/6.x的 Java HeapDump和JavaCore 诊断文件?

三、相关参考资料:
以下内容来自于WebSphere 的Info Center: 

以手动方式生成堆转储

使用此任务来手动生成堆转储。如果使用的 Sun Java 虚拟机(JVM)包含在 HP-UX 和 Solaris 操作系统上运行的 WebSphere Application Server,那么不支持此功能。

在您开始之前

[Windows] [AIX] [Linux] 虽然只有在检测到内存泄漏时才会生成堆转储,但是,您必须知道,生成堆转储时会严重影响 WebSphere Application Server 的性能,并且时间长达数分钟。因此,在以手动方式生成多个堆转储以便进行内存泄漏分析时,请确保泄漏的对象达到相当数目后才创建另一个堆转储。这样,问题确定工具就能够确定内存泄漏的根源。

关于本任务

您可能想以手动方式生成堆转储,以便对内存泄漏进行分析。在 WebSphere Application Server 中的 Java 虚拟机(JVM)上,无法自动生成堆转储。由于生成堆转储的成本相当高,因此,您可能想指定堆转储的生成时间。在 WebSphere Application Server 中的 JVM 上,可以通过对 WebSphere Application Server 受管 Bean(MBean,这些是特殊的 Java bean)执行 generateHeapDump 操作来以手动方式生成堆转储。

WebSphere Application Server wsadmin 工具提供运行脚本的能力。您可以使用 wsadmin 工具来管理 WebSphere Application Server 安装版本以及配置、应用程序部署和服务器运行时操作。WebSphere Application Server 仅支持 Jacl 和 Jython 脚本语言。有关 wsadmin 工具的更多信息,请参阅启动 wsadmin 脚本客户机主题。

过程

  1. 启动 wsadmin 脚本客户机。 要运行脚本命令,您有多个选项,这些选项包括以交互方式运行脚本命令以及在概要文件中运行脚本命令。
  2. 例如,对 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> 所属的节点

下一步做什么?

运行 wsadmin 命令后,将返回堆转储的文件名。有关查找堆转储的更多信息,请参阅查找和分析堆转储主题。在创建了一两个堆转储之后,可使用许多内存泄漏问题确定工具来分析问题。Memory Dump Diagnostic for Java™ i 是一个脱机工具,此工具可用于诊断造成 Java 堆内存泄漏的根本原因。请参阅诊断内存不足错误和 Java 堆内存泄漏,以了解更多信息。


相关信息
诊断内存不足错误和 Java 堆内存泄漏





诊断内存不足错误和 Java 堆内存泄漏

用于 Java™ 的内存转储诊断是一个脱机工具,用于诊断 Java 堆中内存泄漏背后的根本原因。此工具分析内存转储(堆转储)的公共格式,该转储来自运行了 WebSphere® Application Server 的 Java 虚拟机(JVM)。内存转储的分析用于识别可能是内存泄漏根本原因的 Java 堆中的数据结构。此分析也识别主要组成应用程序的 Java 堆占用量的汇总对象组。此工具能够分析出现内存不足问题的生产环境应用程序服务器中非常巨大的内存转储。

在您开始之前

此工具使用从 WebSphere Application Server 产生的内存转储,而不是从用于 Java 的内存转储诊断工具产生的内存转储。支持下列转储格式:
  • [AIX][Linux][Windows] IBM® 可移植堆转储(.phd),用于大多数平台上的 WebSphere Application Server V5.1.x 和更高版本
  • [AIX][Linux][Windows] IBM 文本,用于大多数平台上的 WebSphere Application Server V4.x 和 V5.0.x
  • [HP-UX][Solaris] HPROF,用于 HP-UX 和 Solaris 平台上的 WebSphere Application Server 安装

关于本任务

当对象引用在它们不再需要后无意保留时,内存泄漏可能在 Java 应用程序中发生。即使 Java 语言有内建的垃圾回收机制来帮助程序员显式释放对象,这个问题也会阻止 Java 垃圾回收进程释放内存。由于 Java 堆中大量的对象以及这些对象之间的复杂关系,因此很难在大型的复杂 Java 应用程序中诊断内存泄漏。

存在两种类型的分析机制:单一转储分析和两个转储的比较分析。此工具列示可疑的数据结构和数据类型,并在一个基于浏览器的交互式 Web 应用程序中显示内存转储的内容。该工具在具有相似所有权结构的数据类型有效集图形布局中显示占用量分析结果。此工具将内存转储的内容显示在用于浏览的交互式树形视图中,以及分别显示在对象和数据类型的两个表视图中。树形视图允许您查找每个对象的所有入局和出局引用,以及查看每个具有可疑内存泄漏的数据结构中的容器对象位置。

以脱机方式分析内存转储为识别内存泄漏背后的根本原因提供了低开销的机制。此机制特别适合于在生产中或在压力测试环境中运行的大型应用程序,在这些地方经常首先检测到内存泄漏。

过程

  1. 在某一与要分析的应用程序服务器安装不同的计算机上安装 IBM Support Assistant。 使用一台具有至少 5 千兆字节(GB)可用磁盘空间、至少 1.5 GB RAM 以及一个频率为 2 GHz 或更快的 Intel® 处理器的非生产计算机,最好是在 Linux® 平台上。
  2. 在要分析的应用程序服务器安装上启用详细垃圾回收。

    详细垃圾回收信息帮助从分段存储或本机内存泄漏中排除基本配置问题和内存泄漏问题。有关如何在 IBM 平台上启用详细垃圾回收的更多信息,请参阅 IBM developer kits: Diagnosis documentation

  3. 可选: 在 WebSphere Application Server 中启用轻量级内存泄漏检测。

    启用轻量级内存泄漏检测可以帮助早期检测异常的内存使用行为以及自动触发堆转储。

  4. 为 WebSphere Application Server 启用 JVM 堆转储。

    从 IBM Support Assistant 启动时,请参阅工具提供的文档。

  5. 当堆转储可用时,运行用于 Java 的内存转储诊断工具。
    1. 启动 IBM Support Assistant
    2. 在 IBM Support Assistant 中,选择工具选项卡。
    3. 在左边,单击 WebSphere 6.1
    4. 在右边,单击用于 Java 的内存转储诊断

结果

这样就识别出内存泄漏的可能根本原因。

Java 堆中的内存泄漏在日志文件中产生了 java.lang.OutOfMemoryError 异常。但是,不是所有的内存不足错误是由 Java 堆内存泄漏导致的。内存不足错误也可能由下列情形造成:
  • Java 堆分段存储。在没有连续的大块可用 Java 堆空间可用来分配 Java 对象时,此分段存储发生。此问题存在不同的原因,包括存在锁住对象,或者因为出现重复的大对象分配。
  • 本机堆中的内存泄漏。当一个本机组件(如 DB2® 连接)正在泄漏时,此问题发生。

对于这两种情形,不管是否有大量的可用 Java 堆空间,内存不足错误都可能发生。因此,用于 Java 的内存转储诊断工具在确定这些情况中的根本原因时可能无效。


相关信息
IBM developer kits: Diagnosis documentation



允许自动生成堆转储

使用此任务来启用自动化堆转储生成。如果使用的 Sun Java 虚拟机(JVM)包含在 HP-UX 和 Solaris 操作系统上运行 WebSphere Application Server,那么不支持此功能。您需要研究一下如何在 Sun JVM 上收集堆转储,或者致电 IBM 支持机构。

在您开始之前

虽然只有在检测到内存泄漏时才会生成堆转储,但是,您必须知道,生成堆转储时会严重影响 WebSphere Application Server 的性能,并且时间长达数分钟。

关于本任务

自动化堆转储生成支持,它仅在 IBM Software Development Kit 中可用,并且会分析 AIX、Linux 和 Windows 操作系统上的内存泄漏问题。

在相应的时间手动生成堆转储可能很困难。为了在进行内存泄漏检测时帮助您分析内存泄漏问题,提供了一些自动化堆转储生成支持。此功能仅对 AIX、Linux 和 Windows 操作系统上的 IBM Software Development Kit 可用。

大多数内存泄漏分析工具对两个堆转储执行不同形式的评估。在检测可疑的内存情况时,将在相应的时间自动生成两个堆转储。通常理想状态是一进行问题检测时就执行初始堆转储。在确定泄漏了一定量的内存后,监视内存使用情况并进行另一次堆转储,所以可比较堆转储以找出泄漏源。

为了在进行内存泄漏检测时帮助您分析内存泄漏问题,提供了一些自动化堆转储生成支持。

要自动生成堆转储,请在管理控制台中执行以下步骤:

过程

  1. 在管理控制台导航树中单击服务器 > 应用程序服务器
  2. 单击 server_name > 性能和诊断顾问程序配置
  3. 单击运行时选项卡。
  4. 选中启用自动堆转储收集复选框。
  5. 单击确定

结果

完成这些步骤后,系统将自动生成堆转储。

要点:为了节省磁盘空间,如果在 WebSphere Application Server 主目录中已有 10 个以上的堆转储,性能和诊断顾问程序就会停止创建堆转储。根据应用程序服务器上的堆大小以及工作负载的不同,创建堆转储的成本可能非常高,并且可能会暂时影响系统性能。

下一步做什么?

您可以通过检查 SystemOut.log 文件或运行时消息来监视内存泄漏通知。有关更多信息,请参阅查看性能和诊断顾问程序建议 主题。如果检测到内存泄漏,并且您想要查找堆转储,请参阅查找和分析堆转储主题。


posted on 2008-09-10 15:36 Robin's Programming World 阅读(3068) 评论(5)  编辑  收藏 所属分类: JavaWebshere

评论:
# re: Websphere 6.1关于堆转储的相关资料汇集 2008-09-10 15:43 | 艾依然
好文章,谢谢分享!  回复  更多评论
  
# re: Websphere 6.1关于堆转储的相关资料汇集 2008-10-22 10:58 | winters
真搞笑
“一直以来,发现有某些人完全不尊重我的劳动成果,随意转载,提醒一下那些人小心哪天惹上官司。”

明明转载IBM的文章,还说是自己的。。

无语了。  回复  更多评论
  
# re: Websphere 6.1关于堆转储的相关资料汇集 2008-10-22 17:28 | Robin's Java World
@winters
文章中已经标明了参考资料是来自IBM呀。  回复  更多评论
  
# re: Websphere 6.1关于堆转储的相关资料汇集 2009-06-15 08:57 | ufo
(web server软件)UFO不会出现一个字节的内存泄漏和一个线程的不能回收,使用UFO做Web Server的好处是网站能做得很稳定,永远也不会自己down掉;UFO在托管机房丢包率很高、遭受Hacker攻击、互联网 骨干网被黑等恶劣的环境条件下仍然能很好地运行;UFO在对付Hacker方面(防Hacker弄down和Hacker抓取不该访问的资源)也有足 够措施。
另外,UFO几乎不会进行垃圾回收,消耗CPU很少,在普通的PC Server上用UFO运行网站,平时CPU占用率<0.1%,最多时也不会超 过5%。您知道,JVM的垃圾回收会导致大量的运算,消耗很多CPU,从而导致Server的负载能力和响应速度下降。UFO在对象管理方面采 用了很好的机制和算法,做得很出色。用UFO运行网站,可以一直保证高负载能力,快速的响应速度和低CPU消耗。发布网址:www.gm365.com
  回复  更多评论
  
# re: Websphere 6.1关于堆转储的相关资料汇集 2009-06-15 10:09 | Robin's Java World
@ufo
吹得这么好?
不用GC?谁相信?说说你的原理让大家听听。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问