首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Memory Analyzer(及其 IBM Extensions 插件)为何不再只用于内存泄露(3)

Memory Analyzer(及其 IBM Extensions 插件)为何不再只用于内存泄露(3)

在 Memory Analyzer 中使用 IBM Extensions“总是启动” 的扩展有些 IBM 扩展 “总是启动”,即各种视图显示关于一个与其地址相邻的对象的额外信息。例如,在图 4 显示的用例中,选中的对象现在描述 MemoryStore 中有多少会话,以及那些会话针对哪些 web 应用程序。IBM Extensions 添加会话的数量和应用程序名称,以便立即描述内存使用的起源。
图 4. Memory Analyzer 的 Overview 选项卡显示一个大对象在 Dominator 树视图(共同保留整个 Java 堆的一列对象),类加载器分组使用它加载的类的描述替代类加载器的名称。例如,图 5 中选中的类加载器显示它是 PlantsByWebSphere web 应用程序的类加载器。
图 5. 按照 IBM 产品扩展的类加载器分组的 Dominator Tree下拉菜单扩展有几个 IBM 扩展是可执行查询,可以在 Query Browser 下拉菜单中找到。IBM Extensions 位于 IBM Extensions 类别下,细分为 3 个子类别:Java SE Runtime、CICS Transaction Gateway 和 WebSphere Application Server(见图 6)。
图 6. Open Query Browser Button 展开一个通往 IBM 产品扩展查询的上下文菜单目前可用以下查询:
  • Java SE 运行时
    • Java Overview 提供一个 Java 运行时和流程摘要,包括供应商、版本、操作系统、Java 主目录、类路径和命令行。
    • DirectByteBuffers 生成两个报告:一个摘要,包含 DirectByteBuffer 实例的数量、它们的关联内存以及它们的服务对象;一个表,包含每个单独的 DirectByteBuffer 实例。
    • List All Objects 生成堆上的每个 Java 对象的列表,最初按照各个对象的大小排序。
    • List All GC Roots 生成所有垃圾收集根的列表,并列示从 Java 堆外部(比如线程或 JNI 代码等区域)引用的对象,这些对象充当垃圾收集确定哪些 Java 对象仍然被 Java 应用程序使用的出发点。
    • Export Object 支持将一个对象图作为文本表示写入一个文本文件。
    • Calculate Naive Retained Heap Size 计算一个指定对象保留(或引用)的所有对象,忽略其中有些对象可能还别应用程序的其他部分引用这个事实。
  • CICS Transaction Gateway
    • Overview 提供一个 CICS Transaction Gateway 基本概览,包括版本和构建信息、正在使用的配置、以及所有环境变量集的列表。
    • Active Conversations 提供 CICS Transaction Gateway 中的所有活动 IPIC 对话、它们当前拥有的会话及其状态。
    • Requests 提供 CICS Transaction Gateway 中已经处理或正在处理的 ECI 请求对象。
    • Statistics 提供 CICS Transaction Gateway 记录的统计数据的一个选择。
  • WebSphere Application Server
    • WAS Overview 提供一个 WebSphere Application Server 运行时摘要,包括产品和版本、服务器名称、节点、单元以及已部署应用程序的状态。
    • WAS Cache Analysis 提供应用程序服务器提供的缓存的摘要,显示它们的大小、占用率以及保留的内存。
    • Web Container Analysis 提供已部署 web 应用程序的细目、它们的地址、以及与它们关联的 HTTP 会话的数量。
    • Thread Pool Analysis 提供应用程序服务器提供的线程池的表,其中包括:线程池配置、挂起线程的存在性和当前大小;还提供一个 Java 级线程组表,包括线程计数和关联内存量。
    • HTTP Sessions 生成内存中的每个 HTTP 会话的列表,总结应用程序名称、会话 ID、用户名、超时、以及创建时间和最好访问时间。另外,可以扩展任何 HTTP 会话,查看与会话本身关联的键和值。
    • EJB Container 提供应用程序服务器中部署的每种 EJB 类型的数量的一个简单细目。
    • Application Class Loader Leaks 列示所有应用程序类加载器,表明它们是否被停止,因此导致泄漏。可以使用这个查询来确定哪个应用程序有问题。
    • Alarm Manager 提供可延迟、不可延迟、已延迟以及未排队的警报的列表。
  • WebSphere eXtreme Scale
    • Priority Queue Runnables 发现 APAR                    PM30264 中描述的问题。
扩展实际应用WAS Overview 查询WAS Overview 查询是一个简单查询,显示当前运行的 WebSphere Application Server 的版本和补丁级别,服务器、节点和单元名称,推断的进程启动时间,以及所有应用程序及其运行状态的列表(见图 7)。这个查询可以通过导航到 Open Query Browser > IBM Extensions >                    WebSphere Application Server > WAS Overview 来访问。
图 7. WebSphere Application Server Overview 查询HTTP Sessions 查询一类常见问题与应用程序的 HTTP 会话使用相关。除 OutOfMemoryErrors 外,其他问题包括发现会话内容、超时值、会话标识符以及会话所属的应用程序。还有许多实现细节使得发现会话及其值并不容易。这些细节包括不同的产品版本的类名不同,一个会话有两个映射(一个映射用于持久会话,另一个映射用于非持久会话,这两个映射可能在单个会话中同时保持活动状态)。
HTTP Sessions 查询将所有这些信息都提取到一个树视图中(见图 8)。这个查询可以通过 Open Query Browser > IBM                Extensions > WebSphere Application Server > HTTP Sessions 访问。图 8 中加点的行下面的列是上面的列的继续。
图 8. WebSphere Application Server HTTP Sessions 查询每个会话对象都可以扩展,显示其 “键/值” 对。在图 9 中,会话中有 5 个属性。每个键都采用 sessN 形式,值是一个自定义对象。如果值不是 String,则可以展开行显示对象。
图 9. 带有一个已展开会话及其属性的 WebSphere Application Server HTTP Sessions 查询这个插件还可用于 PHD 堆转储,但大多数元数据都会缺失,只显示属性的保留堆大小。
Application Class Loader Leaks                查询当应用程序重启但它们的类加载器没有清理时,将发生应用程序类加载器泄露。这种情况通常由一个应用程序引用引起,该引用从服务器中的其他地方(比如 ThreadLocals)引用应用程序。如果存在应用程序类加载泄露且应用程序重启次数达到一定数量,就可能会导致 Java 或原生 OutOfMemoryErrors。
Application ClassLoader Leaks 查询将找到所有停止的应用程序类加载器,询问可能导致类加载器不适合垃圾收集的可疑对象。这个插件处理 PHD 堆转储的效果同样好(见图 10)。可以通过 Open Query Browser                > IBM Extensions > WebSphere Application Server > Application ClassLoader Leaks 访问此插件。
图 19. WebSphere Application Server Application ClassLoader Leaks 查询
返回列表