2012-11-05 62 views
2

如果我在JAR中編寫了一個類(編譯時使用mvn assembly:assembly),我試圖進行配置文件,那麼獲取有效的核心轉儲的命令是什麼,我可以使用jhat或Eclipse Memory Analyzer?如何在jar中剖析一個類?

我嘗試運行此:

java -agentlib:hprof=heap=sites,cpu=samples,file=profile.hprof,format=b -jar the-jar.jar

,當我停止過程中創建的核心轉儲。

但是,jhat或Eclipse Memory Analyzer都不會將其識別爲有效轉儲。

與jHat給了我這樣的警告:

Resolving 0 objects... 
WARNING: hprof file does not include java.lang.Class! 
WARNING: hprof file does not include java.lang.String! 
WARNING: hprof file does not include java.lang.ClassLoader! 

通過HPROF文檔還讀書,我知道我必須通過類名。當它位於JAR內部時,我該如何做?

回答

1

類從JAR文件加載的事實與堆轉儲無關。

您可以使用jmap在不修改啓動命令的情況下獲得可用的HPROF堆轉儲。

jmap -heap:format=b <pid> 

其中是您可以通過jps命令行實用程序獲得的進程ID。這兩個可執行文件都是JDK的一部分。