> Linux教程 > 系统运维 >

cpu高分析方法

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=0x44b





(责任编辑:IT)