我試過這個Get a heapdump on JVM from Tomcat 6 但它不適用於我,是否有其他方法從tomcat服務器獲取堆轉儲?提前致謝!如何從運行tomcat獲取堆轉儲7
回答
獲取堆轉儲的最簡單方法是使用jmap。在具有java進程的機器上執行jmap命令。使用示例:
jmap -dump:file=/mnt/heapdump_2013-04-01.data 29842
使用jps知道java Pid。
你也可以通過jvisualvm做堆轉儲。您可以通過jmx或jstatd連接到遠程機器。您可以進行堆轉儲並存儲在遠程計算機上。
要分析堆轉儲可以建議你:MAT。非常強大的工具,可以讓你快速理解問題。你可以找到here好的inro到MAT。
如果你不想長一段時間就可以使二進制轉儲(You can use gcore or gdb)停止的應用程序。你可以use jmap to analyze gdb dump。您可以在atlassian blog上閱讀更多信息。當心someissues。
您可能需要使用「sudo」 – th3morg
除了「轉儲堆」之外的另一種方式 - jvisualvm的-Button是通過JMX接口。這種方式甚至允許您指定存儲轉儲的位置。
使用jconsole或帶有JMX插件的jvisualvm連接到tomcat的JMX服務器。然後得到com.sun.management
- >HotSpotDiagnotic
- >Operations
。在dumpHeap
旁邊填寫兩個參數。從Oracle的文檔(見here):
參數:
OUTPUTFILE - 與系統有關的文件名
現場 - 如果爲true轉儲只能活對象即是從別人可達對象
然後按dumpHeap
並在寫入轉儲時觀察虛擬機凍結一段時間。
我推薦可視VM http://visualvm.java.net/它是一個可以連接到tomcat,創建和讀取堆轉儲,創建線程轉儲,CPU和內存採樣器的一站式工具。
如果您使用新的jdk 1.7,VisualVM已經打包在您的jdk文件夾中。
- 1. 如何獲得堆轉儲和線程轉儲爲Tomcat在Mac
- 2. 如何從正在運行的JVM捕獲堆轉儲
- 3. 如何從運行在Jboss 7或Tomcat 7上的drools jbpm獲取「Drools Server」?
- 4. 如何從HashiCorp Nomad運行的java應用程序獲取堆轉儲?
- 5. Tomcat堆轉儲創建
- 6. 如何採取堆轉儲?
- 7. 我可以讓Tomcat作爲服務運行來轉儲堆嗎?
- 8. 如何從Android直接獲取堆轉儲?
- 9. 如何在ubuntu 12.04中運行tomcat 7?
- 10. 如何在Tomcat上運行時從httpsession上存儲的映射獲取值
- 11. 使用jmx從命令行獲取堆轉儲
- 12. 如何從命令行獲取tomcat JAVA_OPTS?
- 13. 無法從eclipse運行Tomcat 7
- 14. 通過Tomcat運行HtmlUnit 7
- 15. 如何使用AppDynamics捕獲堆轉儲?
- 16. Tomcat內存不足堆轉儲設置
- 17. Eclipse Tomcat插件 - 獲取Tomcat 7
- 18. 如何使用Maven 2 Tomcat插件運行Tomcat 7?
- 19. Tomcat 7 - 無法獲取CATALINA_OPTS堆大小工作
- 20. 在Tomcat中獲取java堆空間問題7
- 21. 如何在Windows 7中運行tomcat 7版本
- 22. java.lang.OutOfMemoryError:Java堆空間在Tomcat 7
- 23. 如何轉儲正在運行的ruby程序的堆內容?
- 24. 如何在apache tomcat中自動生成堆轉儲?
- 25. 如何自動獲得線程轉儲從Tomcat
- 26. 如何使用Eclipse Memory Analyzer Tool從正在運行的進程中轉儲堆?
- 27. 如何從android獲得更長的堆棧轉儲(墓碑)?
- 28. 如何分析堆轉儲
- 29. 從核心轉儲中提取堆轉儲(hprof)
- 30. 從堆轉儲中提取線程轉儲
你遇到了什麼問題試圖做堆轉儲? – Taky
當JVM由於內存不足而死的時候,你鏈接的時候只是做堆轉儲。它不允許您隨時進行堆轉儲。但它對你來說仍然是非常有用的選擇。 – Taky