WAS CPU高处理方法

通过topas或者top发现导致机器cpu高的进程为was的进程ID号。可以通过(ps -ef|grep java 去查询一下was的进程号)

1) 利用工具aixperf.sh (linux利用工具linperf.sh,was6.0利用aixperf60.sh)进行收集数据,ftp该工具至需要收集的系统中。修改执行权限,并注意上传文件所属用户和用户组,假如你的AppSrv01是was用户启动的,则

chmod 755 aixperf.sh   调整执行权限

chown was:was aixperf.sh 调整文件属组,

2) ps –ef|grep java 查看was进程ID号

3) 执行 ./aixperf.sh was进程ID号   (当前was启动用户执行)

4) 在/was/IBM/WebSphere/AppServer/profiles/AppSrv01中生产一个

aixperf_RESULTS.tar.gz及3个左右javacore文件。

下载这些文件至本地分析。信息收集后,可根据需要进行was重启操作。

分析过程:

1) 解压aixperf_RESULTS.tar.gz文件,找到sleep.prof文件,打开,找到如下:

Process                   PID      TID  Total Kernel   User Shared  Other

=======                   ===      ===  ===== ======   ==== ======  =====

java                  1360096  2883655  14.93   0.04   0.00   4.42  10.47

java                  1360096  3797117  14.89   0.03   0.00   4.14  10.72

java                  1360096  4129121  14.60   0.05   0.00   4.17  10.38

java                  1360096   979281  14.45   0.13   0.00   4.55   9.77

wait                     8196     8197   4.28   4.28   0.00   0.00   0.00

PID为当前was的进程ID号,TID为was中线程ID号。Total表示线程占用CPU的比例。

上面的结论:CPU高的主要原因是线程2883655  3797117  4129121  979281  所占用的,因此要找到该线程所对应执行的具体类,方法。

2) 将上面的TID转成16进制。可以利用计算器。

2883655 转成 0x2C0047

3) 在生成的javacore中查找具有0x2C0047的信息。例如:

 

4) 找到对应的java代码,进行分析这个类的

com/huateng/ebank/business/common/operator/ExportQueryListOperation的genBuyBusinessResult方法是否存在问题。

如果定位在这个地方,通常一定会有问题,可能会有循环在这个地方,通常代码中会有while的循环,而且这个地方的循环是逻辑上是没有办法退出来的。

如果逻辑正确,可能是由于数据有问题,此时去查询一下数据库的对应用到的表,是否存在不正常的数据。

如果服务器是Windows的,稍微麻烦一些。如果需要,请留言博主,不过还是劝你放弃Windows上的WAS,

你可能感兴趣的:(WAS)