常用
vmstat 3
pidstat -w
pidstat -wt
grep ctxt /proc/$pid/status
jmap -histo:live pid|less
jmap -heap pid
jmap -permstat pid
printf "%x\n" pid
jstack -l pid
jstat -gcutil pid 1000 100
JVM性能調(diào)優(yōu)監(jiān)控工具
JDK內(nèi)置工具使用
JAVA線程dump分析
JVM致命錯誤日志
1 . CPU的監(jiān)控
# **vmstat**也可以查看總的上下文切換情況
vmstat 3
# 每個進程的context switching情況
pidstat -w
# 細分到每個threads
pidstat -wt
查看proc下的文件方法如下:
# pid=307
# grep ctxt /proc/$pid/status
voluntary_ctxt_switches: 41 #自愿的上下文切換
nonvoluntary_ctxt_switches: 16 #非自愿的上下文切換
cswch/s: 每秒任務(wù)主動(自愿的)切換上下文的次數(shù),當某一任務(wù)處于阻塞等待時,將主動讓出自己的CPU資源。
nvcswch/s: 每秒任務(wù)被動(不自愿的)切換上下文的次數(shù),CPU分配給某一任務(wù)的時間片已經(jīng)用完,因此將強迫該進程讓出CPU的執(zhí)行權(quán)。
2 . JVM性能查看
- jinfo:可以輸出并修改運行時的java 進程的opts。
- jps:與unix上的ps類似,用來顯示本地的java進程,可以查看本地運行著幾個java程序,并顯示他們的進程號。
- jstat:一個極強的監(jiān)視VM內(nèi)存工具。可以用來監(jiān)視VM內(nèi)存內(nèi)的各種堆和非堆的大小及其內(nèi)存使用量。
- jmap:打印出某個java進程(使用pid)內(nèi)存內(nèi)的所有'對象'的情況(如:產(chǎn)生那些對象,及其數(shù)量)。
- jconsole:一個java GUI監(jiān)視工具,可以以圖表化的形式顯示各種數(shù)據(jù)。并可通過遠程連接監(jiān)視遠程的服務(wù)器VM
# 堆中活動的對象以及大小
jmap -histo:live pid|less
# 查看堆的使用狀況信息
jmap -heap pid
# 打印進程的類加載器和類加載器加載的持久代對象信息
jmap -permstat pid
# 查看CPU占用時間最長
printf "%x\n" pid
# 查看jvm線程運行狀態(tài),是否有死鎖現(xiàn)象等等信息
jstack -l pid
# 1000 ms統(tǒng)計一次gc情況統(tǒng)計 100 次
jstat -gcutil pid 1000 100
3 . Jstat 使用
- class:統(tǒng)計class loader行為信息
- compile:統(tǒng)計編譯行為信息
- gc:統(tǒng)計jdk gc時heap信息
- gccapacity:統(tǒng)計不同的generations(不知道怎么翻譯好,包括新生區(qū),老年區(qū),permanent區(qū))相應(yīng)的heap容量情況
- gccause:統(tǒng)計gc的情況,(同-gcutil)和引起gc的事件
- gcnew:統(tǒng)計gc時,新生代的情況
- gcnewcapacity:統(tǒng)計gc時,新生代heap容量
- gcold:統(tǒng)計gc時,老年區(qū)的情況
- gcoldcapacity:統(tǒng)計gc時,老年區(qū)heap容量
- gcpermcapacity:統(tǒng)計gc時,permanent區(qū)heap容量
- gcutil:統(tǒng)計gc時,heap情況
S0 : Heap上的 Survivor space 0 區(qū)已使用空間的百分比
S0C:S0當前容量的大小
S0U:S0已經(jīng)使用的大小
S1 — Heap上的 Survivor space 1 區(qū)已使用空間的百分比
S1C:S1當前容量的大小
S1U:S1已經(jīng)使用的大小
E — Heap上的 Eden space 區(qū)已使用空間的百分比
EC:Eden space當前容量的大小
EU:Eden space已經(jīng)使用的大小
O — Heap上的 Old space 區(qū)已使用空間的百分比
OC:Old space當前容量的大小
OU:Old space已經(jīng)使用的大小
P — Perm space 區(qū)已使用空間的百分比
OC:Perm space當前容量的大小
OU:Perm space已經(jīng)使用的大小
YGC — 從應(yīng)用程序啟動到采樣時發(fā)生
Young GC 的次數(shù)
YGCT– 從應(yīng)用程序啟動到采樣時
Young GC 所用的時間(單位秒)
FGC — 從應(yīng)用程序啟動到采樣時發(fā)生
Full GC 的次數(shù) FGCT– 從應(yīng)用程序啟動到采樣時
Full GC 所用的時間(單位秒)
GCT — 從應(yīng)用程序啟動到采樣時用于垃圾回收的總時間(單位秒),它的值等于YGC+FGC
4 . JVM啟動參數(shù)
# JVM致命錯誤日志
-XX:ErrorFile=./hs_err_pid<pid>.log