Tomcat環(huán)境變量設(shè)置
在tomcat的安裝目錄的bin目錄下措译,編輯一個(gè)名為setenv.sh的文件(如果沒有請(qǐng)創(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文件會(huì)使分析變得較為困難菠隆,因此我們需要定時(shí)的去切割日志文件俺驶。
到/etc/logrotate.d新創(chuàng)建一個(gè)文件雷猪,就叫jvm吧:
/var/log/jvm/*.log {
rotate 300
size = 500M
dateext
missingok
}
日志分析工具
用肉眼掃描JVM的GC日志文件算是一件痛苦的事情票从,我們可以借助一些工具來輔助我們吹零,推薦如下:
(0)gceasy.io
參考文章:http://www.reibang.com/p/72b6e306b9c7
(1)GCHisto
http://java.net/projects/gchisto
直接點(diǎn)擊gchisto.jar就可以運(yùn)行罩抗,點(diǎn)add載入gc.log
統(tǒng)計(jì)了總共gc次數(shù),youngGC次數(shù)瘪校,F(xiàn)ullGC次數(shù)澄暮,次數(shù)的百分比,GC消耗的時(shí)間阱扬,百分比泣懊,平均消耗時(shí)間,消耗時(shí)間最小最大值等
統(tǒng)計(jì)的圖形化表示
YoungGC,FullGC不同消耗時(shí)間上次數(shù)的分布圖麻惶,勾選可以顯示youngGC或fullGC單獨(dú)的分布情況
整個(gè)時(shí)間過程詳細(xì)的gc情況馍刮,可以對(duì)整個(gè)過程進(jìn)行剖析
(2)GCLogViewer
http://code.google.com/p/gclogviewer/
點(diǎn)擊run.bat運(yùn)行
整個(gè)過程gc情況的趨勢(shì)圖,還顯示了gc類型窃蹋,吞吐量卡啰,平均gc頻率静稻,內(nèi)存變化趨勢(shì)等
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
這個(gè)工具用的挺多的,但只能在JDK1.5以下的版本中運(yùn)行亡脸,1.6以后沒有對(duì)應(yīng)押搪。
(5)garbagecat
http://code.google.com/a/eclipselabs.org/p/garbagecat/wiki/Documentation
其它監(jiān)控方法
Jvisualvm動(dòng)態(tài)分析jvm內(nèi)存情況和gc情況,插件:visualGC
jvisualvm還可以heapdump出對(duì)應(yīng)hprof文件(默認(rèn)存放路徑:監(jiān)控的服務(wù)器 /tmp下)浅碾,利用相關(guān)工具大州,比如HPjmeter可以對(duì)其進(jìn)行分析
grep Full gc.log粗略觀察FullGC發(fā)生頻率
jstat –gcutil [pid] [intervel] [count]
jmap -histo pid可以觀測(cè)對(duì)象的個(gè)數(shù)和占用空間jmap -heap pid可以觀測(cè)jvm配置參數(shù),堆內(nèi)存各區(qū)使用情況
jprofiler,jmap dump出來用MAT分析