排查策略概述
CPU占用率异常高情况时,捕捉CPU占用率的线程快照,同时获取ThreadDump,通过一个或多个ThreadDump中查找CPU占用率高的线程,再分析CPU占用率高的具体原因。
排查方案(针对不同平台)
一、Linux平台
CPU占用率异常高时,可重复一下步骤来捕获服务器的线程快照
步骤1:使用top命令获取那些进程正在使用CPU
步骤2: 使用ps –ef | grep weblogic获取对应CPU占用率高的Weblogic进程
步骤3:使用top –H –p
步骤4:使用kill -3
步骤5:快速、重复依次执行步骤3和步骤4,频率每隔5秒执行一次,至少执行三次,5分钟执行一次,十分钟执行一次。
步骤6:分析步骤5收集到的数据
- 通过步骤3捕获的WLS进程的线程快照,获得CPU占用率高的线程PID,分析PID:18174为例,其占用57%CPU资源
- 将CPU高占用率PID:18174转换为十六进制46FE
- 在步骤4获取的ThreadDump中找到nid=0x46FE的线程
- 分析该线程栈信息,确定在做什么任务导致CPU高占用率。----此步骤需要分析步骤5获取的所有数据,以准确定位问题
二、AIX平台
CPU占用率异常高时,可重复一下步骤来捕获服务器的线程快照
步骤1:使用topas命令获取那些进程正在使用CPU
步骤2: 使用ps –ef | grep weblogic获取对应CPU占用率高的Weblogic进程
步骤3:使用ps –mp
步骤4:使用kill -3
步骤5:快速、重复依次执行步骤3和步骤4,频率每隔5秒执行一次,至少执行三次,5分钟执行一次,十分钟执行一次。
步骤6:分析步骤5收集到的数据
1.通过步骤3捕获的WLS进程的线程快照,获得CPU占用率高的线程PID,如下图所示,红框处的三个线程已占用300%的CPU资源
2.将CPU高占用率三个线程PID转换为十六进制
3.在步骤4获取的ThreadDump的javacore中找到对应native ID的三个线程
3XMTHREADINFO "Thread-82" (TID:0x381E9300, sys_thread_t:0x381A2854, state:CW, native ID:0x0018400D) prio=5
3XMTHREADINFO "Thread-83" (TID:0x381E8F00, sys_thread_t:0x381A25B8, state:CW, native ID:0x0018C01D) prio=5
3XMTHREADINFO "Thread-84" (TID:0x38186700, sys_thread_t:0x380CAF1C, state:CW, native ID:0x00186013) prio=5
4.分析该线程栈信息,确定在做什么任务导致CPU高占用率。----此步骤需要分析步骤5获取的所有数据,以准确定位问题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)