簡體   English   中英

從二進制堆轉儲中提取 JVM 正常運行時間

[英]Extract JVM uptime from binary heap dump

我正在分析幾個堆轉儲,並且對一種可以從堆轉儲中獲取 JVM 正常運行時間(或啟動時間)的方法感興趣。 使用 eclipse 內存分析器,我可以輕松獲取系統屬性和類路徑,但找不到找到正常運行時間的方法。

您可以嘗試搜索sun.util.calendar.ZoneInfoFile類,它包含long CURRT字段。 它的值與 VisualVM 中的 JVM 啟動時間匹配(至少在我的情況下,與Oracle JVM匹配):

MAT 截圖

Type|Name |Value
---------------------
long|CURRT|1578570465
---------------------

紀元轉換器說現在是2020/1/9 6.47 am EST (GMT-5) ,這是我啟動 Java 應用程序的時間。 以防萬一, hprof文件是在幾分鍾后的7.03 am

這可能取決於 VM 實現,但至少在 OpenJDK HotSpot 上,VM 啟動時間和正常運行時間不會存儲在堆中,而是作為本機調用實現(請參閱sun.management.VMManagementImpl#getStartupTime()sun.management.VMManagementImpl#getUptime0() )。 這意味着您不會在現有的堆轉儲中找到這些值。

但是,您可以使用ManagementFactory.getRuntimeMXBean().getUptime()ManagementFactory.getRuntimeMXBean().getStartupTime()在正在運行的 VM 中獲取這些值,例如將它們放入系統屬性( System.getProperties().setProperty() )稍后作為轉儲的一部分進行分析。

暫無
暫無

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

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