首頁 > Java > java教程 > 主體

Java 堆轉儲

WBOY
發布: 2024-08-30 15:14:19
原創
686 人瀏覽過

在 Java 中,堆轉儲提供了某個時刻 Java 虛擬機器記憶體中存在的整個物件的快照。堆轉儲對於解決記憶體洩漏問題和優化不同 java 應用程式中的記憶體使用非常有用。每個實例的詳細資訊(如位址、類別名稱、類型、對另一個物件的參考)都記錄在堆轉儲中。堆轉儲有兩種格式,例如手提式堆轉儲格式、二進位格式和asci 文字的經典格式。在下面的部分中,讓我們了解生成堆轉儲的不同工具和技術。

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

堆轉儲格式

  • 便攜式堆轉儲(PHD)格式:在此格式中,轉儲檔案由標頭部分和主體部分組成。轉儲文件的主體部分包含有關物件、類別記錄或陣列的詳細資訊。為了解釋文件格式,使用了原始數字。
  • 經典堆疊轉儲格式:此轉儲格式在除 z / OS 之外的幾乎所有平台上以 ASCII 文字生成,並以 EBCDIC 編碼。

為什麼要用堆轉儲,它的用途是什麼?

通常,此堆轉儲用於我們正在使用的 Java 應用程式佔用的記憶體超過我們的預期,或者應用程式因 OutOfMemoryError 崩潰。如果我們分析堆轉儲,將有助於識別異常的根本原因。除此之外,堆轉儲還可以用於識別詳細信息,例如每個類別的記憶體使用情況、每個類別中的物件數量等。此外,還可以捕捉精細的細節,以及單一物件佔用的記憶體量還可以找出應用程式中存在的Java物件。這些資訊可以幫助我們識別導致記憶體洩漏問題的實際代碼。

工具與技術

以下是以下提到的以下工具和技術

1. JDK 工具

堆轉儲可以使用 JDK 下的不同工具來捕獲,這些工具位於 JDK 主目錄中的 bin 資料夾中。為此,可以使用命令列,因為該目錄存在於系統路徑中。

jmap

jmap 是一個可在本地和遠端進程中使用的工具,用於列印正在運行的 JVM 中的記憶體統計資訊。

要使用 jmap 產生堆轉儲,可以使用 dump 選項,如下所示。

jmap -dump:[live] , format = b , file=< path of the file > <process id>
登入後複製
  • live: 可選參數。如果設定了此項,則僅列印具有活動參考的物件
  • format=b: 提到轉儲檔案格式將為二進位。
  • 檔案:可以將建立的轉儲寫入的檔案
  • PID: Java 進程 ID
  • jcmd

jcmd 是一個向 Java 虛擬機器發送命令請求的工具。此外,它必須存在於執行 Java 進程的機器中。

要取得堆轉儲,可以使用指令 GC.heap_dump,只需提及輸出的 pid 和檔案路徑,如下所示。

jcmd < pid > GC.heap_dump < path of the file >
登入後複製
JVisualVM

JVisualVM 是一個具有簡單直覺的圖形使用者介面的工具,可讓我們監視、故障排除和分析 Java 應用程式。要使用它產生堆轉儲,必須右鍵單擊 Java 進程,並選擇“堆轉儲”選項。完成此操作後,該工具將建立堆轉儲,並在新分頁中開啟它。

2.自動建立堆轉儲

不使用上述的手動技術,而是使用命令列選項 HeapDumpOnOutOfMemoryError 在拋出 java.lang.OutOfMemoryError 時自動建立堆轉儲:

java - XX:+HeapDumpOnOutOfMemoryError
登入後複製

java_pid.hprof 是預設儲存 dump 的文件,它位於應用程式運行的目錄中。

除了預設路徑之外,還可以使用其他檔案路徑,為此,可以使用 HeapDumpPath 選項,如下所示。

java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=< file_path >
登入後複製

因此,當應用程式使用這種方式運行記憶體中斷時,可以在建立的由堆轉儲組成的檔案中看到日誌:

3. JMX

在此,HotSpotDiagnostic MBean 用於產生允許 2 個參數的 dumpHeap 技術。

他們是:

outputFile,這是建立的轉儲的檔案路徑。確保該檔案的副檔名應為 hprof。

live,和jmap中的類似。如果設定了此項,則僅列印具有活動參考的物件

讓我們看看兩種不同的技術來呼叫此方法來捕捉堆轉儲。

JConsole

像 JConsole 這樣的 JMX 客戶端是使用 HotSpotDiagnostic MBean 的最簡單方法。如果 JConsole 開啟並連接到正在執行的 Java 進程,導覽至 MBeans 標籤並識別 com.sun.management 下存在的 HotSpotDiagnostic。在操作中,可以找到先前解釋過的dumpHeap方法。為了執行 dumpHeap 操作,參數 outputFile 和 live 作為 p0 和 p1 文字欄位。

程式方法

與 JConsole 類似,HotSpotDiagnostic MBean 可以透過 Java 程式碼的程式呼叫來使用。為此,MBeanServer 實例必須在應用程式中註冊 MBean。完成後,需要一個 HotSpotDiagnosticMXBean 實例,並且必須呼叫該實例的 dumpHeap 方法。

4. IBM 管理主控台

假設您正在使用的應用程式運行在 IBM Websphere Application Server 上;管理控制台可以產生堆疊。首先,在管理控制台的導覽窗格中,選擇“故障排除”,然後選擇“Java 轉儲和核心”。完成此操作後,為必須建立堆轉儲的伺服器選擇 server_name。之後,按一下「堆轉儲」為上述伺服器建立堆轉儲。 wsadmin 也可以用於建立堆轉儲。

以上是Java 堆轉儲的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!