[英]How do I analyze a .hprof file?
我有一個使用以下標志運行的生產服務器: - XX:+HeapDumpOnOutOfMemoryError
昨晚,當我們的服務器遇到堆錯誤時,它生成了一個 java-38942.hprof 文件。 事實證明,系統的開發人員知道該標志,但無法從中獲取任何有用的信息。
有任何想法嗎?
如果您想要一個相當高級的工具來進行一些認真的探索,請查看 Eclipse 中的 Memory Analyzer 項目,該項目由 SAP 提供。
您可以做的一些事情對於查找內存泄漏等非常有用 - 包括針對內存對象運行一種形式的受限 SQL (OQL),即
SELECT toString(firstName) FROM com.yourcompany.somepackage.User
非常棒。
您可以使用JHAT ,即 JDK 默認提供的 Java 堆分析工具。 它是命令行,但會啟動用於檢查內存的 Web 服務器/瀏覽器。 不是最用戶友好的,但至少它已經安裝在你要去的大多數地方。 一個非常有用的視圖是最底部的“堆直方圖”鏈接。
例如: jhat -port 7401 -J-Xmx4G dump.hprof
jhat
也可以“這些天”執行 OQL(底部鏈接“執行 OQL”)
您還可以使用來自 Netbeans Profiler 或Visual VM獨立工具的HeapWalker 。 Visual VM 是 JHAT 的一個很好的替代品,因為它是獨立的,但比 JHAT 更容易使用。
您需要 Java 6+ 才能完全使用 Visual VM。
只需獲取Eclipse 內存分析器。 沒有比這更好的了,而且是免費的。
JHAT 僅可用於“玩具應用程序”
YourKit Java Profiler 似乎也可以處理它們。
如果你想對你的 heapdump 進行自定義分析,那么有:
這個庫速度很快,但你需要用 Java 編寫分析代碼。
從文檔:
我個人更喜歡 VisualVM。 我喜歡 VisualVM 的功能之一是堆轉儲比較。 在進行堆轉儲分析時,有多種方法可以找出導致崩潰的原因。 我發現有用的方法之一是比較健康和不健康的堆轉儲。
以下是您可以遵循的步驟:
鏈接: https : //visualvm.github.io
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.