在平常運(yùn)維分析jvm的時(shí)候通常用到的工具的jps,jstat,jstack,jmap用于分析tomcat遇到的各種問題
成都創(chuàng)新互聯(lián)公司2013年至今,先為陸河等服務(wù)建站,陸河等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為陸河企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。tomcat常見的問題有:
OOM,線程死鎖(lock dead),鎖爭(zhēng)用(lock contention),Java消耗過(guò)多的CPU
可以通過(guò)以上工具進(jìn)行分析
生產(chǎn)常用分析方法快速入口:
#jps????????--> 查看運(yùn)行的java進(jìn)程
#jstat -gc 進(jìn)程pid --> 查看進(jìn)程新生代老年代的內(nèi)存使用情況,年輕代老年代垃圾收集次數(shù)及時(shí)間
#jstat -gccause 進(jìn)程pid --> 查看進(jìn)程垃圾收集原因
#jmap -heap 進(jìn)程pid --> 查看進(jìn)程堆內(nèi)存具體使用情況
#jstack -l 進(jìn)程pid --> 查看線程信息,用于分析線程爭(zhēng)取,死鎖造成tomcat假死的情況
jps:java虛擬機(jī)進(jìn)程查看工具
jps [options] [hostid]
-m:輸出傳入main方法的參數(shù)
-l:顯示main的完整類名
-v:顯示為jvm虛擬機(jī)指定的參數(shù)
常用的組合:
#jps -m -l
#jps -m -l -v??
[gcct1@localhost?bin]$?jps?-m?-l?-v 5966?org.apache.catalina.startup.Bootstrap?start?-Djava.util.logging.config.file=/mnt/tomcat/conf/logging.properties?-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager?-Djava.endorsed.dirs=/mnt/tomcat/endorsed?-Dcatalina.base=/mnt/tomcat?-Dcatalina.home=/mnt/tomcat?-Djava.io.tmpdir=/mnt/tomcat/temp 7006?sun.tools.jps.Jps?-m?-l?-v?-Denv.class.path=.:/usr/java/jdk1.7.0_79/lib/dt.jar:/usr/java/jdk1.7.0_79/lib/tools.jar?-Dapplication.home=/usr/java/jdk1.7.0_79?-Xms8m
jstat:jvm虛擬機(jī)運(yùn)行時(shí)內(nèi)存使用及垃圾回收情況監(jiān)控
jstat -
-options:查看有哪些選項(xiàng)可以使用
-gc:使用此選項(xiàng)時(shí),后面加java的進(jìn)程號(hào);例jstat -gc 27564 [1s](也可跟上多少時(shí)間顯示一次)
S0C,S1C:表示第一個(gè)和第二個(gè)生存區(qū)的容量
???? S0U,S1U:表示第一個(gè)和第二個(gè)生存區(qū)的已使用的容量
???? EC,EU:表示eden區(qū)域的容量和已用量
???? OC,OU:表示老年代區(qū)的容量和已用量
???? PC,PU:表示持久代的內(nèi)存容量和已用量
???? YGC,YGT:表示新生代的GC發(fā)生的次數(shù)和耗時(shí)
???? FGCT,FGCT:表示老年代Full GC發(fā)生的次數(shù)和耗時(shí)
???? GCT:表示總的GC耗時(shí)
-gccause:
??? LGCC:上次GC的原因
??? GCC:當(dāng)前GC的原因
[gcct1@localhost?bin]$?jstat?-gc?5966 ?S0C????S1C????S0U????S1U??????EC???????EU????????OC?????????OU???????PC?????PU????YGC?????YGCT????FGC????FGCT?????GCT??? 40960.0?36864.0??0.0???36850.3?253952.0?161159.5??109056.0???74574.4???53248.0?45852.6?????19????1.672???3??????2.193????3.865 [gcct1@localhost?bin]$?jstat?-gccause?5966 ??S0?????S1?????E??????O??????P?????YGC?????YGCT????FGC????FGCT?????GCT????LGCC?????????????????GCC????????????????? ??0.00??99.96??63.76??68.38??86.11?????19????1.672?????3????2.193????3.865?Allocation?Failure???No?GC
jmap:查看堆內(nèi)存使用情況,包括使用的GC算法,堆配置參數(shù)和各代堆內(nèi)存使用情況,跟jstat有點(diǎn)類似
-heap:詳細(xì)的輸出堆內(nèi)存的使用情況
? -histo:顯示所有的對(duì)象信息
? -histo:live:手動(dòng)觸發(fā)full GC,然后顯示存活的對(duì)象信息(常用于老年代調(diào)優(yōu))
? -h:獲取幫助信息
?? 例:jmap -heap 5966 ? --> 查看堆內(nèi)存的詳細(xì)使用情況
[gcct1@localhost?bin]$?jmap?-heap?5966 Attaching?to?process?ID?5966,?please?wait... Debugger?attached?successfully. Server?compiler?detected. JVM?version?is?24.79-b02 using?thread-local?object?allocation. Parallel?GC?with?2?thread(s) Heap?Configuration: ???MinHeapFreeRatio?=?0 ???MaxHeapFreeRatio?=?100 ???MaxHeapSize??????=?1019215872?(972.0MB) ???NewSize??????????=?1310720?(1.25MB) ???MaxNewSize???????=?17592186044415?MB ???OldSize??????????=?5439488?(5.1875MB) ???NewRatio?????????=?2 ???SurvivorRatio????=?8 ???PermSize?????????=?21757952?(20.75MB) ???MaxPermSize??????=?85983232?(82.0MB) ???G1HeapRegionSize?=?0?(0.0MB) ......
jstack:查看某個(gè)java進(jìn)程內(nèi)的線程堆棧信息
jstack [options] pid
? -l:long listings(會(huì)輸出完整的鎖信息);jstack -l 進(jìn)程號(hào)
? -m:混合模式,即會(huì)輸出java堆棧及C/C++堆棧信息
通過(guò)jstack可以查看線程爭(zhēng)用,線程死鎖等信息
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。