[prdps@prdpsdev001iad bin]$ jps -m -l
48893 com.valueclickbrands.hybrid.HybridApiStart
57367 com.pricerunner.hybrid.HybridPageStart
57481 com.pricerunner.hybrid.HybridPageStart
jstack主要用來查看某個Java進程內的線程堆棧信息。語法格式如下:
jstack [option] pid
jstack [option] executable core
jstack [option] [server-
id
@]remote-
hostname
-or-ip
-l long listings,會打印出額外的鎖信息,在發生死鎖時可以用jstack -l pid來觀察鎖持有情況
-m mixed mode,不僅會輸出Java堆棧信息,還會輸出C
/C
++堆棧信息(比如Native方法)
第一步先找出Java進程ID,我部署在服務器上的Java應用名稱為HybridApiStart:
[prdps@prdpsdev001iad bin]$ ps -ef|grep java|grep HybridApiStart|grep -v grep
prdps 48893 1 0 Jan27 ? 00:00:55 /ask/prun/dps/AllApp/Hybrid/jdk/bin/。。。。
第二步找出該進程內最耗費CPU的線程,可以使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid,我這里用第三個,輸出如下:
[prdps@prdpsdev001iad bin]$ top -Hp 48893
top - 04:29:29 up 407 days, 2:00, 5 users, load average: 0.00, 0.04, 0.09
Tasks: 102 total, 0 running, 102 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 65957312k total, 24918236k used, 41039076k free, 2608264k buffers
Swap: 1048568k total, 8060k used, 1040508k free, 14009316k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21742 prdps 20 0 36.5g 1.7g 144m S 0.0 2.8 0:00.02 java
48896 prdps 20 0 36.5g 1.7g 144m S 0.0 2.8 0:05.14 java
TIME列就是各個Java線程耗費的CPU時間,選一個線程ID為21742的線程,用
printf
"%x\n"
21742
得到21742的十六進制值為54ee,下面會用到。
OK,下一步終於輪到jstack上場了,它用來輸出進程21711的堆棧信息,然后根據線程ID的十六進制值grep,如下:
jstack 21711 | grep 54ee
就能看到結果了;
C、 jmap(Memory Map)和jhat(Java Heap Analysis Tool)
jmap用來查看堆內存使用狀況,一般結合jhat使用。
jmap語法格式如下:
jmap [option] pid
jmap [option] executable core
jmap [option] [server-
id
@]remote-
hostname
-or-ip
jmap -permstat pid
打印進程的類加載器和類加載器加載的持久代對象信息,輸出:類加載器名稱、對象是否存活(不可靠)、對象地址、父類加載器、已加載的類大小等信息。
使用jmap -heap pid查看進程堆內存使用情況,包括使用的GC算法、堆配置參數和各代中堆內存使用情況。
使用jmap -histo[:live] pid查看堆內存中的對象數目、大小統計直方圖,如果帶上live則只統計活對象
D、jstat(JVM統計監測工具)
語法格式如下:
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
vmid是Java虛擬機ID,在Linux/Unix系統上一般就是進程ID。interval是采樣時間間隔。count是采樣數目。比如下面輸出的是GC信息,采樣時間間隔為250ms,采樣數為4:
jstat -gc 21711 250 4