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.pswp.cn/news/372944.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372944.shtml
英文地址,請注明出處:http://en.pswp.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 …