簡體   English   中英

jhat 拋出無法識別的幻數

[英]jhat throwing unrecognized magic number

我正在嘗試分析從遇到 memory 問題的 java 進程中提取的堆轉儲。 轉儲是使用 jmap 進行的。 我在轉儲文件上使用 jhat - 我得到

java.io.IOException: Unrecognized magic number: 169897589 at com.sun.tools.hat.internal.parser.Reader.readFile(Reader.java:94) at com.sun.tools.hat.Main.main(Main.java:159)

jdk 1.6 和 1.7 都給出相同的錯誤。 我在我的 Windows 機器上本地運行 jhat(在復制轉儲文件之后)並且轉儲文件是在 Linux 服務器上獲取的。

任何想法我做錯了什么?

如果你看一下com.sun.tools.hat.internal.parser.Reader的源代碼,你會發現它正在尋找幻數0x4a415641

此值用於幫助識別有效的堆轉儲文件。 jmap應該將此值附加為它創建的任何堆轉儲文件的前四個字節。

我建議在十六進制編輯器中打開堆轉儲並檢查前四個字節是否為0x4a415641 在Linux和Windows計算機上檢查此文件。 傳輸文件時,文件可能已損壞。

可能,你得到了生成jvm轉儲文件的錯誤方法。 使用jmap -histo {pid}> dump.log時發生錯誤。

嘗試

jmap -dump:live;file=filename pid

祝好運。

最有可能的是,您正在向 jhat 工具提供 zip 文件(.gz 或 .tar.gz)。 這就是它無法驗證 hprof header 的原因。 最近,我遇到了同樣的情況。 我的堆轉儲是在 Linux 服務器上以 .tar.gz 格式捕獲的,我按原樣提供以獲得與您相同的錯誤。 解壓文件后,jhat 能夠分析 .hprof 文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM