[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