您好,登錄后才能下訂單哦!
在平常運維分析jvm的時候通常用到的工具的jps,jstat,jstack,jmap用于分析tomcat遇到的各種問題
tomcat常見的問題有:
? OOM,線程死鎖(lock dead),鎖爭用(lock contention),Java消耗過多的CPU
? 可以通過以上工具進行分析
生產常用分析方法快速入口:
? #jps????????--> 查看運行的java進程
? #jstat -gc 進程pid --> 查看進程新生代老年代的內存使用情況,年輕代老年代垃圾收集次數及時間
? #jstat -gccause 進程pid --> 查看進程垃圾收集原因
? #jmap -heap 進程pid --> 查看進程堆內存具體使用情況
? #jstack -l 進程pid --> 查看線程信息,用于分析線程爭取,死鎖造成tomcat假死的情況
jps:java虛擬機進程查看工具
? jps [options] [hostid]
?? -m:輸出傳入main方法的參數
?? -l:顯示main的完整類名
?? -v:顯示為jvm虛擬機指定的參數
? 常用的組合:
?? #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虛擬機運行時內存使用及垃圾回收情況監控
? jstat -<option> pid:(<options>為必須選項)
?? -options:查看有哪些選項可以使用
?? -gc:使用此選項時,后面加java的進程號;例jstat -gc 27564 [1s](也可跟上多少時間顯示一次)
???? S0C,S1C:表示第一個和第二個生存區的容量
???? S0U,S1U:表示第一個和第二個生存區的已使用的容量
???? EC,EU:表示eden區域的容量和已用量
???? OC,OU:表示老年代區的容量和已用量
???? PC,PU:表示持久代的內存容量和已用量
???? YGC,YGT:表示新生代的GC發生的次數和耗時
???? FGCT,FGCT:表示老年代Full GC發生的次數和耗時
???? GCT:表示總的GC耗時
?? -gccause:
??? LGCC:上次GC的原因
??? GCC:當前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:查看堆內存使用情況,包括使用的GC算法,堆配置參數和各代堆內存使用情況,跟jstat有點類似
? -heap:詳細的輸出堆內存的使用情況
? -histo:顯示所有的對象信息
? -histo:live:手動觸發full GC,然后顯示存活的對象信息(常用于老年代調優)
? -h:獲取幫助信息
?? 例:jmap -heap 5966 ? --> 查看堆內存的詳細使用情況
[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:查看某個java進程內的線程堆棧信息
? jstack [options] pid
? -l:long listings(會輸出完整的鎖信息);jstack -l 進程號
? -m:混合模式,即會輸出java堆棧及C/C++堆棧信息
? 通過jstack可以查看線程爭用,線程死鎖等信息
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。