HPROF –内存泄漏分析教程

本文将为您提供有关如何通过生成和分析Sun HotSpot JVM HPROF堆转储文件来分析JVM内存泄漏问题的教程。

一个现实的案例研究将用于此目的:Weblogic 9.2内存泄漏影响Weblogic Admin服务器。

环境规格

  • Java EE服务器:Oracle Weblogic Server 9.2 MP1
  • 中间件操作系统:Solaris 10
  • Java虚拟机:Sun HotSpot 1.5.0_22
  • 平台类型:中间层

监控和故障排除工具

  • Quest Foglight(JVM和垃圾收集监视)
  • jmap(hprof /堆转储生成工具)
  • 通过IBM支持助手进行的Memory Analyzer 1.1(hprof堆转储分析)
  • 平台类型:中间层

步骤#1 – WLS 9.2管理服务器JVM监视和泄漏确认

Quest Foglight Java EE监视工具对于从Weblogic Admin服务器识别Java堆泄漏非常有用。 如下所示,Java Heap内存随着时间的推移而增长。

如果您没有为Weblogic环境使用任何监视工具,那么我建议您至少启用HotSpot VM的verbose:gc。 请访问有关此主题的Java 7 verbose:gc教程 ,以获取更多详细说明。

步骤#2 –从泄漏的JVM生成堆转储

发现JVM内存泄漏后,目标是使用Sun JDK jmap实用程序生成堆转储文件(二进制格式)。

**请注意,生成jmap堆转储将导致您的JVM无法响应,因此请确保运行jmap实用程序之前 ,没有更多的流量发送到受影响的/泄漏的JVM **

<JDK HOME>/bin/jmap -heap:format=b <Java VM PID>

此命令将生成泄漏的JVM的堆转储二进制文件(heap.bin)。 文件的大小和生成过程所花费的时间将取决于您的JVM大小和计算机规格/速度。

对于我们的案例研究,在大约1小时的时间里生成了约2 GB的二进制堆转储文件。

由于OutOfMemoryError并在JVM启动参数中添加-XX:+ HeapDumpOnOutOfMemoryError,也会自动生成Sun HotSpot 1.5 / 1.6 / 1.7堆转储文件。

步骤#3 –在Memory Analyzer工具中加载堆转储文件

现在是时候在Memory Analyzer工具中加载堆转储文件了。 加载过程将需要几分钟,具体取决于堆转储的大小和计算机的速度。

步骤#4 –分析您的堆转储

内存分析器为您提供了许多功能,包括“可疑泄漏”报告。 对于此案例研究,以Java堆直方图为起点来分析泄漏的对象和源。

对于我们的案例研究,发现java.lang.String和char []数据是泄漏的对象。 现在的问题是泄漏的根源是什么,例如那些泄漏对象的引用。 只需右键单击泄漏的对象,然后选择>>列出对象>带有传入引用的引用

如您所见,发现javax.management.ObjectName对象是泄漏的String&char []数据的源。 Weblogic Admin服务器正在通过MBeans / JMX通信并从其受管服务器中提取统计信息,该MBeans / JMX为任何MBean对象类型创建javax.management.ObjectName。 现在的问题是,为什么Weblogic 9.2无法正确发布此类对象……

根本原因:Weblogic javax.management.ObjectName泄漏!

在我们进行堆转储分析之后,对Weblogic的已知问题进行了回顾,但确实发现了以下Weblogic 9.2错误:

  • Weblogic错误ID:CR327368
  • 说明:管理服务器上的javax.management.ObjectName对象的内存泄漏,用于在管理服务器上引起OutOfMemory错误。
  • 受影响的Weblogic版本:WLS 9.2
  • 固定在:WLS 10 MP1

http://download.oracle.com/docs/cd/E11035_01/wls100/issues/known_resolved.html
考虑到我们的堆转储分析,WLS版本和此已知问题描述的完美匹配,这一发现是非常确定的。

结论

我希望本教程和案例研究能帮助您了解如何使用jmap和Memory Analyzer工具查明Java Heap泄漏的来源。

请不要犹豫,发表任何评论或问题。

我还提供了免费的Java EE咨询,因此请给我发电子邮件 ,并向我提供您的堆转储文件的下载链接,以便我可以为您进行分析并在此Blog上创建一篇文章来描述您的问题,根本原因和解决方案。

参考: HPROF –来自我们的JCG合作伙伴 Pierre-Hugues Charbonneau的内存泄漏分析教程 ,位于Java EE支持模式和Java教程博客中。


翻译自: https://www.javacodegeeks.com/2012/04/hprof-memory-leak-analysis-tutorial.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mq服务器与客户端消息同步,使用 ActiveMQ 实现JMS 异步调用

目录简介服务之间的同步调用&#xff0c;可以使用 HTTP 或 RPC 来完成&#xff0c;但并非所有的调用都需要同步&#xff0c;有些场景下&#xff0c;当客户端调用服务端时&#xff0c;并不需要等待服务端做出响应&#xff0c;此时就应该使用异步调用。异步调用的常用方式是基于 …

多个数字数组_七个问题帮助初学者深入理解Java数组

短文涨姿势&#xff0c;看了不白看&#xff0c;不关注等啥&#xff1f;几乎所有的高级语言当中&#xff0c;都提供了一种叫做”数组”的东西&#xff0c;Java语言当然也不例外。我们通过数组可以很方便的存储和管理一组数据。因为在Java语言当中使用数组非常的方便&#xff0c;…

java 异常练习题1

建立exception包&#xff0c;建立Bank类&#xff0c;类中有变量double balance表示存款,Bank类的构造方法能增加存款&#xff0c;Bank类中有取款的发方法withDrawal(double dAmount),当取款的数额大于存款时,抛出InsufficientFundsException,取款数额为负数&#xff0c;抛出Nag…

大话设计模式读书笔记--6.原型模式

简单的复制粘贴极有可能造成重复代码的灾难, 但是java中提供了克隆的功能, 如果一个对象创建过程复杂,又要频繁使用, 在初始化信息不发生变化的情况下,应当采取克隆而不是new一个对象 定义 原型模式: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 也就是说,…

Java 7#8:测试台上的NIO.2文件通道

关于新JDK 7功能的另一篇博客文章。 这次我正在写有关新的AnsynchronousFileChannel类的文章。 我将在两周内深入分析新的JDK 7功能&#xff0c;并决定连续编号我的帖子。 只是为了确保我不会感到困惑&#xff1a;-)这是我关于Java 7的第七篇文章&#xff08;我承认–碰巧–这也…

5页面title样式修改_认识html:实现网站页面是这么简单的一回事

互联网时代人们通过上网浏览信息&#xff0c;打开浏览器上网看到丰富的图文、视频、音乐等多媒体信息&#xff0c;一系列信息反馈和视觉冲击之后&#xff0c;您有没有想过&#xff0c;互联网这么发达的时代&#xff0c;您觉得花一点点时间学会做个网站页面不真香&#xff1f;概…

iOS指南针

前言&#xff1a; 这个小项目使用到了CoreLocation框架里面的设备朝向功能&#xff0c;对CoreLocation感兴趣的可以翻一下之前的文章 在另一个博客站有朋友发现一个尴尬的问题&#xff08;图片的东西2个方向是不对的&#xff09;&#xff0c;原谅我的大意&#xff0c;赶时间就直…

OSGI –模块化您的应用程序

由于我是模块化&#xff0c;低耦合&#xff0c;高凝聚力等的大力拥护者&#xff0c;所以…… 我相信这项技术是我们使用Java平台创建应用程序的突破。 使用OSGi&#xff0c;创建高度可扩展的应用程序非常简单&#xff0c;例如参见Eclipse IDE。 我的目的不是要深入展示该技术的…

jq的链式调用.end();

jq的链式调用.end(); 先上code <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>li{list-style: none;width: 100px;height:20px;border:1px solid #ff0000;display: …

三、自定义视图、视图控制器

1.自定义视图 自定义视图&#xff1a;系统标准UI之外&#xff0c;自己组合而出的新的视图。在实际开发中&#xff0c;我们经常需要自己定义视图&#xff0c;积累自己的代码库。自己封装的视图&#xff0c;能像系统提供的UI控件一样用于多个项目中&#xff0c;这样可以提高我们的…

程序如何在两个gpu卡上并行运行_深度学习分布式训练相关介绍 - Part 1 多GPU训练...

本篇文章主要是对深度学习中运用多GPU进行训练的一些基本的知识点进行的一个梳理文章中的内容都是经过认真地分析&#xff0c;并且尽量做到有所考证抛砖引玉&#xff0c;希望可以给大家有更多的启发&#xff0c;并能有所收获介绍大多数时候&#xff0c;梯度下降算法的训练需要较…

集成Spring和JavaServer Faces:改进的模板

随着2.0版的发布&#xff0c;Facelet模板成为JSF规范的核心部分。 使用<ui&#xff1a;composition>和<ui&#xff1a;decorate>标记&#xff0c;可以轻松构建复杂的页面&#xff0c;同时仍保持标记清晰。 模板在创建HTML表单时特别有用&#xff0c;但是不幸的是&a…

whmcs模板路径

whmcs网站根目录 比如你的域名是server.nongbin.vip&#xff0c;你需要cd /home/wwwroot/server.nongbin.vip&#xff0c;该目录下然后&#xff0c;cd template/ 给文件夹下就是你上传的模板文件夹转载于:https://www.cnblogs.com/nongbin/p/6412108.html

系统英伟达gpu驱动卸载_绕过CPU,英伟达让GPU直连存储设备

英伟达最近发布了一个新的GPUDirect Storage&#xff0c;暂且叫做GPU直连存储&#xff0c;让GPU直接连到NVMe存储设备上。这一方案用到了RDMA设备来把数据从闪存存储转移到GPU本地的内存里&#xff0c;无需经过CPU还有系统内存。如果这一举措顺利的话&#xff0c;英伟达就能摆脱…

37、EnumSet详解

EnumSet类也是有顺序的&#xff0c;EnumSet按照枚举值在Enum类内定义的顺序决定集合元素的顺序 EnumSet在内部已位向量的形式存储&#xff0c;这种存储方式非常紧凑、搞笑&#xff0c;因此EnumSet占用内存很小&#xff0c;而且运行效率很好。 EnumSet集合不允许加入null元素 En…

嘲弄和存根–了解Mockito的测试双打

介绍 我遇到的一件事是使用模拟框架的团队假设他们在模拟。 他们并不知道Mocks只是Gerard Meszaros在xunitpatterns.com上归类的“测试双打”之一。 重要的是要意识到每种类型的测试双精度在测试中都扮演着不同的角色。 用与您需要学习不同模式或重构的方式相同&#xff0c;您…

numpy 辨异(三)—— hstack/column_stack,linalg.eig/linalg.eigh

1. np.hstack np.column_stack >>> np.hstack([np.array([1, 2, 3]), np.array([4, 5, 6])]) array([1, 2, 3, 4, 5, 6])>>> np.column_stack([np.array([1, 2, 3]), np.array([4, 5, 6])]) array([[1, 4],[2, 5],[3, 6]]) 当然对等地&#xff0c;也存在&…

【代码笔记】iOS-首页3张图片变化

一&#xff0c;效果图。 二&#xff0c;工程图。 三&#xff0c;代码。 RootViewController.h #import <UIKit/UIKit.h>interface RootViewController : UIViewController {NSTimer *timer;UIImageView *imageView1;UIImageView *imageView2;UIImageView *imageView3;UIV…

acwing算法提高之动态规划--数位DP

目录 1 基础知识2 模板3 训练 1 基础知识 暂无。。。 2 模板 暂无。。。 3 训练 题目1&#xff1a;度的数量。 解题思路&#xff1a;分类讨论。 C代码如下&#xff0c; #include <iostream> #include <vector>using namespace std;const int N 35; int K,…

python 输入数字变成密码_如何在python中检查数字的“密码”

我建议使用sets和stdlib中的string包作为可接受字符的列表。在我还建议进行一点重构&#xff0c;以删除大量带有if / else分支的嵌套。在import stringupper set(list(string.uppercase))lower set(list(string.lowercase))numbers set(list(string.digits))while True:npw …