我的服务器信息如下:
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.9-42.ELsmp #1 SMP Wed Jul 12
23:27:17 EDT 2006 i686 i686 i386 GNU/Linux
1、top命令查看进程当前java进程的CPU使用率,已经所占用的资源等等信息,如进程号pid。
top - 18:14:51 up 403 days, 22:27, 1
user, load average: 0.00, 0.02,
0.31 Tasks: 64
total, 1
running, 63
sleeping, 0
stopped, 0
zombie Cpu0 : 0.3%
us, 0.0% sy, 0.0% ni, 99.7%
id, 0.0% wa, 0.0%
hi, 0.0% si Cpu1 : 0.0%
us, 0.0% sy, 0.0% ni, 99.3%
id, 0.7% wa, 0.0%
hi, 0.0% si Cpu2 : 0.0%
us, 0.3% sy, 0.0% ni, 99.7%
id, 0.0% wa, 0.0%
hi, 0.0% si Cpu3 : 0.0%
us, 0.0% sy, 0.0% ni, 100.0%
id, 0.0% wa, 0.0%
hi, 0.0% si Mem: 4149144k
total, 898412k
used, 3250732k
free, 58720k
buffers Swap: 8289532k
total, 120k used, 8289412k
free, 398564k
cached PID
USER PR NI VIRT RES SHR S %CPU
%MEM TIME+ COMMAND 12509
root 25 0 2456m 358m 8108
S 1 8.8 0:33.89
java //当前CPU使用很小之前达到398
2、ps命令查看当前java进程下每个线程的线程号和CPU使用率(TOP下的CPU使用率和PS下的意义不一样,真实CPU使用以TOP为准)
[root@localhost ~]# ps -eLo pid,lwp,pcpu |
grep 12509|sort -nk
3 //查看全部线程信息并自定义以长列表输出 sort -nk
3 按数字大小第三列排列
12509 12594 0.0
12509 12595 0.0
12509 12596 0.0
12509 12597 0.0
12509 12510 0.1
12509 12546 0.1
12509 12520 0.4
12509 12519 0.5
3、输出java的各线程的使用信息
[root@localhost ~]# kill -3
12509 //默认输出是tomcat的logs下catalina.out下,也就是JVM控制台输出信息。
截取最后几行如下
"Reference Handler" daemon prio=10 tid=0x080fa000 nid=0x2edfin
Object.wait() [0x235bc000]
java.lang.Thread.State:
WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x34297e70> (a
java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:485)
at
java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
- locked <0x34297e70> (a
java.lang.ref.Reference$Lock)
"main" prio=10 tid=0x08059000 nid=0x2ed9 runnable
[0xb740b000]
java.lang.Thread.State:
RUNNABLE
at java.net.PlainSocketImpl.socketAccept(Native
Method)
at java.net.PlainSocketImpl.accept(Unknown
Source)
- locked <0x34ce5670> (a
java.net.SocksSocketImpl)
at java.net.ServerSocket.implAccept(Unknown
Source)
at java.net.ServerSocket.accept(Unknown
Source)
at
org.apache.catalina.core.StandardServer.await(StandardServer.java:431)
at
org.apache.catalina.startup.Catalina.await(Catalina.java:676)
at
org.apache.catalina.startup.Catalina.start(Catalina.java:628)
at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
Source)
at java.lang.reflect.Method.invoke(Unknown
Source)
at
org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at
org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
"VM Thread" prio=10 tid=0x080f7400 nid=0x2ede runnable
//GC信息,可以查看GC占用CPU的使用率(nid为16进制,转为10进制则是上面ps -eLo
pid,lwp,pcpu | grep 12509|sort -nk
3内容中第二列的线程ID)
"GC task thread#0 (ParallelGC)" prio=10 tid=0x08060000 nid=0x2eda
runnable
"GC task thread#1 (ParallelGC)" prio=10 tid=0x08061800 nid=0x2edb
runnable
"GC task thread#2 (ParallelGC)" prio=10 tid=0x08062c00 nid=0x2edc
runnable
"GC task thread#3 (ParallelGC)" prio=10 tid=0x08064400 nid=0x2edd
runnable
"VM Periodic Task Thread" prio=10 tid=0x0811dc00 nid=0x2ee5 waiting
on condition
JNI global references: 940
Heap
PSYoungGen total 260736K, used 47834K [0xa4290000, 0xb4290000,
0xb4290000)
eden space 259328K, 18% used
[0xa4290000,0xa70c4150,0xb3fd0000)
from space 1408K, 37% used
[0xb4130000,0xb41b2798,0xb4290000)
to space
1408K, 0% used [0xb3fd0000,0xb3fd0000,0xb4130000)
PSOldGen total 1835008K, used 175050K [0x34290000, 0xa4290000,
0xa4290000)
object space 1835008K, 9% used
[0x34290000,0x3ed82a40,0xa4290000)
PSPermGen total 262144K, used 19527K [0x24290000, 0x34290000,
0x34290000)
object space 262144K, 7% used
[0x24290000,0x255a1c68,0x34290000)
//主要通过判断nid=0x2edf 来和ps -eLo pid,lwp,pcpu |
grep 12509|sort -nk 3的线程号比对,看CPU被什么占用了!