Tomcat環(huán)境變量設(shè)置
在tomcat的安裝目錄的bin目錄下,編輯一個名為setenv.sh的文件(如果沒有請創(chuàng)建),在環(huán)境變量名字為 CATALINA_OPTS的變量其中添加:
XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -Xloggc:/var/log/jvm/`date +"%Y-%m-%d"`_gc.log
可以參考:
export CATALINA_OPTS=" -Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxremote=true -Djava.security.egd=file:/dev/./urandom -Xms512M -Xmx4096M -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -Xloggc:/var/log/jvm/`date +"%Y-%m-%d"`_gc.log"
日志切割設(shè)置
過于大的log文件會使分析變得較為困難,因此我們需要定時的去切割日志文件。
到/etc/logrotate.d新創(chuàng)建一個文件,就叫jvm吧:
/var/log/jvm/*.log {
rotate 300
size = 500M
dateext
missingok
}
日志分析工具
用肉眼掃描JVM的GC日志文件算是一件痛苦的事情,我們可以借助一些工具來輔助我們,推薦如下:
(0)gceasy.io
參考文章:http://www.itdecent.cn/p/72b6e306b9c7
(1)GCHisto
http://java.net/projects/gchisto
直接點(diǎn)擊gchisto.jar就可以運(yùn)行,點(diǎn)add載入gc.log
統(tǒng)計了總共gc次數(shù),youngGC次數(shù),F(xiàn)ullGC次數(shù),次數(shù)的百分比,GC消耗的時間,百分比,平均消耗時間,消耗時間最小最大值等

統(tǒng)計的圖形化表示

YoungGC,FullGC不同消耗時間上次數(shù)的分布圖,勾選可以顯示youngGC或fullGC單獨(dú)的分布情況

整個時間過程詳細(xì)的gc情況,可以對整個過程進(jìn)行剖析

(2)GCLogViewer
http://code.google.com/p/gclogviewer/
點(diǎn)擊run.bat運(yùn)行
整個過程gc情況的趨勢圖,還顯示了gc類型,吞吐量,平均gc頻率,內(nèi)存變化趨勢等
Tools里還能比較不同gc日志

(3)HPjmeter
獲取地址 http://www.hp.com/go/java參考文檔 http://www.javaperformancetuning.com/tools/hpjtune/index.shtml
工具很強(qiáng)大,但只能打開由以下參數(shù)生成的GC log, -verbose:gc -Xloggc:gc.log,添加其他參數(shù)生成的gc.log無法打開。
(4)GCViewer
http://www.tagtraum.com/gcviewer.html
這個工具用的挺多的,但只能在JDK1.5以下的版本中運(yùn)行,1.6以后沒有對應(yīng)。
(5)garbagecat
http://code.google.com/a/eclipselabs.org/p/garbagecat/wiki/Documentation
其它監(jiān)控方法
Jvisualvm動態(tài)分析jvm內(nèi)存情況和gc情況,插件:visualGC


jvisualvm還可以heapdump出對應(yīng)hprof文件(默認(rèn)存放路徑:監(jiān)控的服務(wù)器 /tmp下),利用相關(guān)工具,比如HPjmeter可以對其進(jìn)行分析
grep Full gc.log粗略觀察FullGC發(fā)生頻率
jstat –gcutil [pid] [intervel] [count]
jmap -histo pid可以觀測對象的個數(shù)和占用空間jmap -heap pid可以觀測jvm配置參數(shù),堆內(nèi)存各區(qū)使用情況
jprofiler,jmap dump出來用MAT分析