[英]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.