针对应用服务器出现cpu持续异常高的情况,参照BEA工程师提供的方法,需要收集一些信息进行分析来查明是我们系统的原因还是weblogic的原因,或者是别的原因。
目前一直观察CPU使用情况,虽然现在还没有收集到真正要的信息,但可以先将方法整理出来,供大家参考。
操作方法:
1、在服务器上which dbx,如果有,可跳过此步,如果提供找不到,则需要安装aix第一张安装盘中的bos.adt软件包,具体安装方法如下:
2、重新整理了bea提供的调整weblogic配置的地方,修改和补充的地方用颜色区分出来了,见附件weblogic改造文档(补充).doc
3、weblogic的启动文件startWebLogic.sh、startp.sh和startm.sh里要将原来加的 MEM_ARGS="-Xms768m -Xmx768m -Xrs"最后的-Xrs去掉,这个参数问过集成的李难俊,是系统信号什么的东东,具体不是很清楚,说只要不是手工发信号,去掉没什么影响。启动文件修改完,需要重启服务。
4、分析方法:见附件bea官网cpu占用高的分析 或者 去bea官方网站上的说明:http://www.bea.com.cn/support_pattern/High_CPU_Usage_Pattern.html#AIX
注:1、如果没有去掉启动文件中的-Xrs,执行kill -3时,会将该进程直接杀死,并在服务器上产生一个core的二进制文件,该文件几百M,而且也无法进行分析。
2、官方网站上没说需要重复收集多次信息,用来进行比较分析,上次枣庄出现了后,只收集了一次信息,联系bea工程师,说一次不能进行比较分析,原因不一定是当时抓到的那个进程,需要多次进行比较。教训,所以大家在进行分析的时候,多执行几次
ps -mp <WLS_PID> -o THREAD 和 kill -3 <WLS_PID> ,多抛几个javacoreXXX.XXX.txt文件出来,该文件在你的域下面,如/beawlsp4/user_projects/domains/mydomain下,注意看看占用CPU高的是不是都是那(几)个进程。
5、系统使用速度慢的时候,还要同时观察数据库的情况,有时候造成cpu异常高也可能是因为开发人员写SQL的时候有些条件没有加上,或者没有有效利用索引造成的,当营销系统反应比较慢的时候,可以先查找一下数据库有没有锁表的语句:
SELECT /*+ rule */ S.USERNAME, DECODE(L.TYPE, 'TM', 'TABLE LOCK', 'TX', 'ROW LOCK', NULL)
LOCK_LEVEL, O.OWNER, O.OBJECT_NAME, O.OBJECT_TYPE, S.SID, S.SERIAL#, S.TERMINAL, S.MACHINE, S.PROGRAM, S.OSUSER
FROM V$SESSION S, V$LOCK L, DBA_OBJECTS O
WHERE L.SID = S.SID
AND L.ID1 = O.OBJECT_ID(+)
AND S.USERNAME IS NOT NULL;
根据锁表的SID在session中找到该进程,点sqltext就可以看见造成速度慢或者锁表的SQL语句。
或者按照李宗阳提供的方法:
登陆数据库服务器,并切换到oracle用户
sqlplus yykf
@$ORACLE_HOME/rdbms/admin/addmrpt.sql
会列出时间段,选择开始时间段和结束时间段
Enter value for begin_snap: 开始时间段
Begin Snapshot Id specified:
Enter value for end_snap: 截止时间段
End Snapshot Id specified:
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is addmrpt_2_3113_3114.txt. To use this name,
press <return> to continue, otherwise enter an alternative.
Enter value for report_name: 输出文件名
该报告文件会将效率比较低的SQL语句分析出来。