java jstat gc_分析JVM GC及内存情况的方法
當(dāng)JVM響應(yīng)變慢或者停滯的時(shí)候,我們往往需要對(duì)GC和其內(nèi)存情況是進(jìn)行分析,下面列舉一些常用的分析方法和工具:
獲得GC信息的方法
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
-XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStopped
-XX:+ PrintGCApplicationConcurrentTime,打印在collection之間,程序運(yùn)行的時(shí)間
-XX:+ PrintGCApplicationStopped,打印的是collection pause的時(shí)間
下面是這兩個(gè)參數(shù)的輸出樣例:
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的開(kāi)銷(xiāo)大致在2.6%到3.6%.
jstat
jstat的-option參數(shù)有很多種,輸出的內(nèi)容各不相同,詳情參考官方文檔
dump內(nèi)存的方法
被動(dòng)dump
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/dump.hprof
在OutOfMemory時(shí),輸出一個(gè)dump文件,記錄當(dāng)時(shí)的內(nèi)存快照,并把文件輸出到/tmp/dump.hprof文件
主動(dòng)dump
利用jmap把內(nèi)存dump下來(lái),比如jmap -dump:live,format=b,file=dump.hprof
內(nèi)存dump分析工具
jhat
Java內(nèi)置工具(教程),dump文件少于1G的時(shí)候可以用這個(gè),它會(huì)起一個(gè)web服務(wù),用于查看dump信息。
需要有一臺(tái)內(nèi)存大于dump文件大小2倍的機(jī)器
HeapAnalyzer
直接分析dump并展示的客戶端(下載)
需要有一臺(tái)內(nèi)存大于dump文件大小2倍的機(jī)器,還需要能顯示出來(lái)的(桌面操作系)
mat
展示dump的客戶端(神器)(下載)(教程)
mat分為展示和分析模塊,可以用一個(gè)ParseHeapDump.sh先對(duì)dump文件分析并產(chǎn)生一堆索引文件(用服務(wù)器搞),然后再用mat的桌面應(yīng)用打開(kāi)這些文件,4G內(nèi)存的機(jī)器分析8G的dump完全沒(méi)壓力。
如果你下的mat沒(méi)有ParseHeapDump.sh,可以自己添加一個(gè):
#!/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 "$@"
相關(guān)資料
總結(jié)
以上是生活随笔為你收集整理的java jstat gc_分析JVM GC及内存情况的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java安全初始化_java安全编码指南
- 下一篇: ORACLE客户端jdbc连接测试,Or