主要關(guān)注點(diǎn):
GC日志分析
調(diào)優(yōu)命令
調(diào)優(yōu)工具
GC日志分析
摘錄GC日志一部分(前段為年輕代gc回收月培;后段為full gc回收):
2016-07-05T10:43:18.093+0800: 25.395: [GC [PSYoungGen: 274931K->10738K(274944K)] 371093K->147186K(450048K), 0.0668480 secs] [Times: user=0.17 sys=0.08, real=0.07 secs]
2016-07-05T10:43:18.160+0800: 25.462: [Full GC [PSYoungGen: 10738K->0K(274944K)] [ParOldGen: 136447K->140379K(302592K)] 147186K->140379K(577536K) [PSPermGen: 85411K->85376K(171008K)], 0.6763541 secs] [Times: user=1.75 sys=0.02, real=0.68 secs]
通過上面日志分析得出,PSYoungGen鸦致、ParOldGen企孩、PSPermGen屬于Parallel收集器锭碳。其中PSYoungGen表示gc回收前后年輕代的內(nèi)存變化;ParOldGen表示gc回收前后老年代的內(nèi)存變化柠硕;PSPermGen表示gc回收前后永久區(qū)的內(nèi)存變化工禾。young gc 主要是針對(duì)年輕代進(jìn)行內(nèi)存回收比較頻繁运提,耗時(shí)短蝗柔;full gc 會(huì)對(duì)整個(gè)堆內(nèi)存進(jìn)行回城闻葵,耗時(shí)長(zhǎng),因此一般盡量減少full gc的次數(shù)
young gc 日志:
Full GC日志:
調(diào)優(yōu)命令
Sun JDK監(jiān)控和故障處理命令有jps jstat jmap jhat jstack jinfo
jps癣丧,JVM Process Status Tool,顯示指定系統(tǒng)內(nèi)所有的HotSpot虛擬機(jī)進(jìn)程槽畔。
jstat,JVM statistics Monitoring是用于監(jiān)視虛擬機(jī)運(yùn)行時(shí)狀態(tài)信息的命令胁编,它可以顯示出虛擬機(jī)進(jìn)程中的類裝載厢钧、內(nèi)存、垃圾收集嬉橙、JIT編譯等運(yùn)行數(shù)據(jù)早直。
jmap,JVM Memory Map命令用于生成heap dump文件
jhat市框,JVM Heap Analysis Tool命令是與jmap搭配使用霞扬,用來分析jmap生成的dump,jhat內(nèi)置了一個(gè)微型的HTTP/HTML服務(wù)器枫振,生成dump的分析結(jié)果后喻圃,可以在瀏覽器中查看
jstack,用于生成java虛擬機(jī)當(dāng)前時(shí)刻的線程快照粪滤。
jinfo斧拍,JVM Configuration info 這個(gè)命令作用是實(shí)時(shí)查看和調(diào)整虛擬機(jī)運(yùn)行參數(shù)。
詳細(xì)的命令使用參考這里jvm系列(四):jvm調(diào)優(yōu)-命令篇
調(diào)優(yōu)工具
常用調(diào)優(yōu)工具分為兩類,jdk自帶監(jiān)控工具:jconsole和jvisualvm杖小,第三方有:MAT(Memory Analyzer Tool)肆汹、GChisto。
jconsole予权,Java Monitoring and Management Console是從java5開始县踢,在JDK中自帶的java監(jiān)控和管理控制臺(tái),用于對(duì)JVM中內(nèi)存伟件,線程和類等的監(jiān)控
jvisualvm硼啤,jdk自帶全能工具,可以分析內(nèi)存快照斧账、線程快照谴返;監(jiān)控內(nèi)存變化、GC變化等咧织。
MAT嗓袱,Memory Analyzer Tool,一個(gè)基于Eclipse的內(nèi)存分析工具习绢,是一個(gè)快速渠抹、功能豐富的Java heap分析工具蝙昙,它可以幫助我們查找內(nèi)存泄漏和減少內(nèi)存消耗
GChisto,一款專業(yè)分析gc日志的工具