一、异常高 CPU 占用率的故障症状
当一个进程或线程占用的 CPU 资源百分百异常高时发生,可能会是其他进程或线程丧
失或缺乏执行要求的处理任务所需的 CPU 处理能力,应进行定期检查(监视)。
异常高 CPU 占用率的故障症状:
1) 用户响应时间长;
2) Weblogic 服务器运行速度异常缓慢;
3) 请求或操作开始出现超时。
二、异常高 CPU 占用率探查
当能够确认当前系统缓慢,是由于异常高 CPU 占用率引起的时,就需要运用下述的各
种手段进行问题定位和探查。
探查概述
首先要确定哪个(些)WebLogic 进程线程导致了异常高 CPU 占用率,做法是在发生高
占用率情况时捕捉 Thread Dump,然后找到服务器 Thread Dump 中的高占用率线程(这一
过程视所在平台而有所不同,该过程可能包括若干个步骤)
不断重复执行上述过程来确保已建立了模式并找对了线程,可以利用一次或多次
Thread Dump 探查发生异常高 CPU 占用率的具体原因。
1、Solaris 平台上探查
发生异常高 CPU 占用率时,请重复这些步骤来捕捉服务器活动的快照:
1) 使用以下命令捕捉哪些线程 (LWPID) 正在使用 CPU: prstat -L -p <WLSpid>;
2) 使用以下命令获得 LWPID 到(十进制)PID 的映射:pstack <WLSpid> ;
3) 使用以下命令获得服务器 Thread Dump:kill -3 <WLSpid>;
然后按下述方法利用收集到的输出:
1) 在 prstat 输出中找到使用率最高(最高频率条目)的 LWPID;
2) 在 pstack 输出中找到该 LWPID,获得对应的线程编号;
3) 将线程编号转换为十六进制号码;
4) 在服务器 Thread Dump 中找到像“nid=<hexNum>”这样的十六进制线程编号;
5) 确定该线程执行的哪一项任务导致了异常高 CPU 占用率。
2、HP-UX 平台上探查
可以使用比较容易下载到的,原 BEA 技术支持部门开发的 hp_prstat 使用程序,在发
生异常高 CPU 占用率时,请重复这些步骤来确定服务器活动的模式:
1) 使用以下命令捕捉那些正在使用 CPU 的线程 (LWPID):hp_prstat <WLSpid> ;
2) 使用以下命令获得服务器 Thread Dump:kill -3 <WLSpid>。
然后按下述方法利用收集到的输出:
1) 找到“用户时间”增加最快的一个或多个 LWPID;
2) 在服务器 Thread Dump 中找到像“lwp_id=<LWPID>”这样的对应 LWPID 号码;
3) 确定该线程执行的哪一项任务导致了异常高 CPU 占用率。
3、Linux 平台上探查
在 Linux 传统系统上,每个线程均作为独立的进程出现。
发生异常高 CPU 占用率时,请重复这些步骤来捕捉服务器活动的快照:
1) 使用 top 确定哪些线程正在使用 CPU;
2) 使用以下命令获得服务器 Thread Dump: kill – 3 <WLSpid>。
然后按下述方法利用收集到的输出:
1) 在 top 输出中,寻找具有启动服务器的 userID 的进程线程;
2) 获得 CPU 占用率最高的服务器线程的 PID;
3) 将高占用率的 PID 转换为十六进制值;
4) 在服务器 Thread Dump 中找到十六进制 PID;
5) 确定该线程执行的哪一项任务导致了异常高 CPU 占用率。
4、Windows 平台上探查
下载一个工具来分析线程的 CPU 的占用率:pslist 可提供进程的线程详细信息。另
外,还有一个 Process Explorer 是可显示进程的动态性能统计信息的图形化工具。
发生异常高 CPU 占用率时,请重复这些步骤来确定服务器的线程活动:
1) 使用以下两种工具之一捕捉正在使用 CPU 的线程 (LWPID):pslist -d <WLSpid>
或 Process Explorer;
注:下载地址: http://www.sysinternals.com/ntw2k/freeware/pslist.shtml
和 http://www.sysinternals.com/ntw2k/freeware/procexp.shtml
2) 使用以下命令获得服务器 Thread Dump:Ctrl+Break
然后按下述方法利用收集到的输出:
1) 找到“用户时间”和“内核时间”增加最快的线程;
2) 将线程编号转换为十六进制值,如<hexNum>;
3) 在服务器 Thread Dump 中找到像“nid=<hexNum>”这样的十六进制线程编号;
4) 确定该线程执行的哪一项任务导致了异常高 CPU 占用率。
三、异常高 CPU 占用率故障排除策略及相关资源
对这类问题的故障排除策略如下:
(1)通过重复收集信息确定占用率模式:
– 捕捉 CPU 占用率高的线程或用户时间快速增加的线程的快照;
– 同时获得 Thread Dump;
– 使用各平台提供的工具。
(2)在服务器的一个或多个 Thread Dump 中查找异常高 CPU 占用率线程;
(3)在 Thread Dump 中探查导致异常高 CPU 占用率的具体原因;
(4)继续监视,看是否还会发生故障。