解决过程:
1,根据top命令,发现PID为7137的Java进程占用CPU高达200%,出现故障。

2,找到该进程后,如何定位具体线程或代码呢,首先显示线程列表,并按照CPU占用高的线程排序:
显示结果如下:
[app100657741@qxtx-s20-246 ~]$ ps -mp 7137 -o THREAD,tid,time  
USER     %CPU PRI SCNT WCHAN  USER SYSTEM   TID     TIME
25438    14.2   -    - -         -      -     - 00:02:23
25438     0.0  19    - futex_    -      -  7137 00:00:00
25438     3.4  19    - futex_    -      -  7138 00:00:34

或者

[app100657741@qxtx-s20-246 ~]$ top -H -p 7137

top - 13:24:41 up 17 min, ? users,  load average: 0.15, 0.17, 0.10
Tasks:  68 total,   0 running,  68 sleeping,   0 stopped,   0 zombie
Cpu(s):  6.4%us,  0.8%sy,  0.0%ni, 91.2%id,  0.4%wa,  0.0%hi,  0.0%si,  1.2%st
Mem:   4051060k total,  2523676k used,  1527384k free,     7060k buffers
Swap:  2097144k total,        0k used,  2097144k free,   145776k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                    
7220 app10065  20   0 4780m 2.0g  12m S  2.0 52.1   0:05.53 java                                                                                                      
7224 app10065  20   0 4780m 2.0g  12m S  2.0 52.1   0:05.24 java      

找到了耗时最高的线程,占用CPU最大的!

将需要的线程ID转换为16进制格式:
[root@localhost logs]# printf "%x\n" 7220
1c34

最后打印线程的堆栈信息:
[root@localhost logs]# jstack 2633 |grep 1c34 -A 30

[root@localhost logs]#jstat -gcutil 5342 1000 300   #可以显示gc的信息,查看gc的次数,及时间
[root@localhost logs]#jmap -histo 5342                  #打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。
[root@localhost logs]# jmap -dump:format=b,file=gamexdds1.dump 15370   #dump内存