摘要:如果你下的沒有,可以自己添加一個相關資料幾個關鍵淘測試使用進行堆轉儲文件分析
當JVM響應變慢或者停滯的時候,我們往往需要對GC和其內存情況是進行分析,下面列舉一些常用的分析方法和工具:
獲得GC信息的方法 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps詳細解釋可以看JAVA SE 6 GC調優筆記
-XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStopped-XX:+ PrintGCApplicationConcurrentTime,打印在collection之間,程序運行的時間
-XX:+ PrintGCApplicationStopped,打印的是collection pause的時間
下面是這兩個參數的輸出樣例:
Application time: 1.3874623 seconds [GC [DefNew: 8064K->63K(8128K), 0.0509215 secs] 11106K->5994K(32704K), 0.0510972 secs] Total time for which application threads were stopped: 0.0517092 seconds Application time: 1.5225065 seconds [GC [DefNew: 8127K->63K(8128K), 0.0432982 secs] 14058K->8273K(32704K), 0.0434172 secs] Total time for which application threads were stopped: 0.0440447 seconds Application time: 1.4263524 seconds [GC [DefNew: 8127K->64K(8128K), 0.0363538 secs] 16337K->10381K(32704K), 0.0364811 secs] Total time for which application threads were stopped: 0.0369103 seconds
從上面可以看出程序在minor collection之間跑了1.38到1.52秒,minor collection pause在.036到.051。所以minor collection的開銷大致在2.6%到3.6%.
jstatjstat的-option參數有很多種,輸出的內容各不相同,詳情參考官方文檔
dump內存的方法 被動dump-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/dump.hprof
在OutOfMemory時,輸出一個dump文件,記錄當時的內存快照,并把文件輸出到/tmp/dump.hprof文件
主動dump利用jmap把內存dump下來,比如jmap -dump:live,format=b,file=dump.hprof
內存dump分析工具 jhatJava內置工具(教程),dump文件少于1G的時候可以用這個,它會起一個web服務,用于查看dump信息。
需要有一臺內存大于dump文件大小2倍的機器
HeapAnalyzer直接分析dump并展示的客戶端(下載)
需要有一臺內存大于dump文件大小2倍的機器,還需要能顯示出來的(桌面操作系)
mat展示dump的客戶端(神器)(下載)(教程)
mat分為展示和分析模塊,可以用一個ParseHeapDump.sh先對dump文件分析并產生一堆索引文件(用服務器搞),然后再用mat的桌面應用打開這些文件,4G內存的機器分析8G的dump完全沒壓力。
如果你下的mat沒有ParseHeapDump.sh,可以自己添加一個:
#!/bin/sh # # This script parses a heap dump. # Adjust the path to java, version 5 or later, and the heap size as required. # Suitable for 64-bit and 32-bit Java, but a 64-bit Java is required # for larger heap sizes. # # Usage: ParseHeapDump.sh相關資料[report]* # # The leak report has the id org.eclipse.mat.api:suspects # The top component report has the id org.eclipse.mat.api:top_components # java -Xmx8192M -jar "`dirname "$0"`"/plugins/org.eclipse.equinox.launcher_1*.jar -consoleLog -application org.eclipse.mat.api.parse "$@"
Spark on Yarn:幾個關鍵Pull Request
淘測試
使用 Eclipse Memory Analyzer 進行堆轉儲文件分析
Memory Analyzer Help Documentation
Diagnosing a Garbage Collection problem
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/65032.html
摘要:內存模型和運行時數據區域的關系主內存對應著堆,工作內存對應著棧。在的單例模式中有運用到二運行時數據區域內存區域因為的運行時數據區域一直在改善,所以不同版本之間會有不同。 一、java內存模型 showImg(https://segmentfault.com/img/remote/1460000016694250?w=1810&h=941); java定義內存模型的目的是:為了屏蔽各種...
摘要:內存溢出分配的內存空間超過系統內存。內存泄漏的原因分析由大塊組成堆,棧,本地方法棧,程序計數器,方法區。內存溢出的原因分析內存溢出是由于沒被引用的對象垃圾過多造成沒有及時回收,造成的內存溢出。小結棧內存溢出程序所要求的棧深度過大導致。 showImg(https://segmentfault.com/img/bVbweuq?w=563&h=300); 前言:JVM中除了程序計數器,其他...
摘要:原文鏈接這是專家系列文章的第二篇。運行在本地虛擬機上的應用的又稱為,通常與相同。性能數據需要持續觀察,因此在運行時需要定時輸出的監控信息。新生代容量的統計信息。是提供的一個式的圖表監控工具。 原文鏈接:http://www.cubrid.org/blog/dev-platform/how-to-monitor-java-garbage-collection/ 這是GC專家系列文章的第二...
摘要:堆內存使用分析,垃圾收集器日志解讀重要的東東在中,對象實例都是在堆上創建。機制是由提供,用來清理需要清除的對象,回收堆內存。在中,是由一個被稱為垃圾回收器的守護線程執行的。 堆內存使用分析,垃圾收集器 GC 日志解讀 重要的東東 在Java中,對象實例都是在堆上創建。一些類信息,常量,靜態變量等存儲在方法區。堆和方法區都是線程共享的。 GC機制是由JVM提供,用來清理需要清除的對象,...
閱讀 1999·2021-11-19 09:40
閱讀 1955·2021-09-28 09:36
閱讀 2291·2021-09-22 10:02
閱讀 2732·2019-08-30 14:00
閱讀 1957·2019-08-29 15:31
閱讀 2904·2019-08-29 15:11
閱讀 2913·2019-08-29 13:04
閱讀 1087·2019-08-27 10:55