1、[root@cc-ful2-01 ~]# top
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
31058 was2 15 0 747m 431m 32m S 6 2.7 86:45.18 java
3801 was2 22 0 1600m 1.5g 34m S 1 9.4 118:51.46 java
7839 was1 16 0 1440m 1.2g 33m S 1 7.5 25:45.03 java
2200 was2 17 0 898m 829m 33m S 0 5.1 135:25.05 java
2、[root@cc-ful2-01 ~]# ps -eo user,pid,tid,pcpu -T|grep PID|sort -rn +3|head -50
was1 1426 9345 0.0
was1 1426 9134 0.0
was1 1426 8963 0.0
was1 1426 8875 0.0
3、strace -o a.strace -f -F -p 9345 -p 9143 -p 8963
strace 跟踪操作系统进程,查看是否有读写操作和SystemOut或者SystemErr等关键词
-f :除了跟踪当前进程外,还跟踪其子进程。
-o file :将输出信息写到文件file中,而不是显示到标准错误输出(stderr)。
-p pid :绑定到一个由pid对应的正在运行的进程。此参数常用来调试后台进程。
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.
4、 kill -3 pid
生成core dump,文件名称类似于 javacore.20100226.152745.11570.txt
5、select to_char('9345','xxxxxxx') from dual (词句需要在数据库环境执行,例如在PL/SQL工具下执行)
将第3步得到的TID 转换成16进制
6、用第5步得到的16进制数去 core dump里找到该子线程为何消耗CPU
关键字 native ID: 具体方法参考"中间件/酒店hisejb CPU消耗较高的问题"
7、查找资料、联系业务使用的插件,确认故障线程所做操作由何原因导致
8、 jstack 30420 | less,然后查找 nid=0x44bf,哦,找到了
9、pstack <pid>
10、ps -Lf pid|sort -rn +4|head -10|more