2015-12-02 324 views
9

問題防止程序的痕跡

爲什麼VisualVM的試圖查看對象分配堆棧跟蹤時終止我的程序,以及如何解決這個問題?


我清理它有一些內存的問題,應用程序中的最大的問題是創造了一堆短命int[]導致GC火像瘋了似的:

enter image description here

當我右鍵單擊int[]並選擇拍攝快照和顯示分配堆棧軌跡,我的應用程序關閉並彈出一個警告框,說無法獲得結果快照。該應用程序終止

enter image description here

我關於這個問題發現的最接近的事情是一個bug報告,其中recommended running my profiled application with -Xnoclassgc。它沒有奏效,結果是一樣的。


規格

VisualVM: 1.8.0_60 (Build 1380-140910); platform 20140910-unknown-revn 
Java: 1.8.0_60; Java HotSpot(TM) 64-Bit Server VM (25.60-b23, mixed mode) 
Eclipse: Luna Release (4.4.0) Build id: 20140612-0600 
System: Windows 7 (6.1) Service Pack 1, amd64 64bit 

崩潰日誌

http://pastebin.com/a4YPWutj

崩潰日誌的超出大小字符限制,所以我不得不把它放在別處。抱歉。

+0

只是先問幾個問題: 1. Eclipse是否與您剛纔描述的這種情況有關?您列出了您的Eclipse版本,但沒有提及任何其他方式。 2. Java和系統信息是否來自您運行應用程序的服務器? –

+0

此外,應用程序崩潰應導致保存用於調試目的的崩潰報告。你能找到文件(hprof?)並粘貼相關內容嗎? –

+0

你測試Java Mission Control(jmc.exe)嗎?這是相同的工具,但Java8有一些沒有免費的功能。但是你可以做到與VisualVM相同的功能。 –

回答

5

好的。因此,基於所獲得的系統崩潰日誌,它看起來像你碰到了在這裏已經報道了VisualVM的錯誤:

JVM being profiled crashes

原有的BUG提交縮小這種行爲降到Java8,所以最好的機會,你有在較舊的(Java7)運行時上運行VisualVM。如果這是您的選擇,那麼您只需要下載Java7 JDK並直接從那裏運行VisualVM。

+0

唉,我想我現在可以開始使用JMC了,因爲使用Java 7不是一個選項/:感謝您找到這個! –