某通信自助终端系统196服务器CPU异常高 故障诊断案例

某通信自助终端系统196服务器出现了CPU异常高的情况,其中有一个WAS服务器进程占用CPU高达51%,严重影响服务器性能,我司工程师到达现场通过分析与讨论确定是由于业务代码“com/known/util/sendAlertMesage.setAlertInfo”占用CPU较多导致,后续需要开发商分析与优化该业务逻辑,减少对主机CPU的损耗。

工作内容:现场对自助终端系统196服务器CPU异常高原因进行故障排查

工作过程:

1.    现场与用户了解异常情况;

2.    收集相关服务器信息;

3.    分析服务器信息;

4.    分析当前进程正在占用CPU和TID线程信息;

5.    多次输出threaddump线程执行堆栈快照信息;

6.    将占用CPU较高的线程号转换为16进制数据,对照threaddump文件进行分析;

7.    根据多次输出的threaddump文件找到相关的业务逻辑代码。

Ø  收集196服务器信息:

v  自助终端系统196服务器出现CPU异常高的情况

执行topas命令行,输出信息如下:

1.jpg

从服务器输出信息可以看出,主机CPU占用率超过52%,CPU异常高。而占用CPU较高的进程是was用户的java进程,PID为:254040。

Ø  分析确认占用服务器CPU高的was用户进程信息:

执行ps –ef|grep 254040得知该进程为WebSphere服务器server1

Ø  分析当前进程正在占用CPU和TID线程信息:

执行ps -mp 254040 -o THREAD命令行,找到当前进程正在占用CPU和TID的线程信息,发现有一列CP占用率较高,该值为:1597475。

Ø  多次输出threaddump线程执行堆栈快照信息:

执行kill -3 254040输出ThreadDump线程执行堆栈快照信息,该命令会生成一个javacore文件,该文件的

具体位置在/usr/IBM/WebSphere/AppServer/profiles/AppSrv01/目录下。每隔15秒执行一次,一共执行3次,避免误差。

Ø  将占用CPU较高的线程号转换为16进制数据,对照threaddump文件进行分析:

将1597475转换为16进制数字为:186023。对照3次输出的threaddump文件,均找到如下相同的日志信息:

2.jpg

从日志信息可以看出,业务逻辑“com/known/util/sendAlertMesage.setAlertInfo”导致CPU占用异常高。

4、解决方案

通过上节分析可知,导致196服务器异常高的原因是由于业务逻辑代码“”引起,因此为了彻底解决该问题,需要由开发商分析优化该业务逻辑代码,减少对主机CPU的消耗。

问题解决方案:

由开发商分析优化业务逻辑代码“com/known/util/sendAlertMesage.setAlertInfo”,以彻底解决CPU占用率异常高。

5、处理结果

最后把该文档移交给开发人员检查,发现该业务逻辑的确有bug,经过开发人员的修复后,问题不在出现。

总结

自助终端系统出现主机CPU占用率超过51%,通过执行命令行找到占用率较高的线程号,然后再对照threaddump信息找到相应的业务逻辑代码,交由开发商分析优化以彻底解决该问题。

参与5
  • 请问下,转换的16进制186023,为什么对应不到你发的图中的ID:0x0018A093
    2017-03-01

1同行回答

yangjianxvyangjianxv部门总经理成方金融科技有限公司

great

收起
银行 · 2016-12-29
浏览1360

提问者

eianbo
IT顾问PBCCRC
擅长领域: 服务器中间件监控

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2016-12-23
  • 关注会员:3 人
  • 问题浏览:4051
  • 最近回答:2016-12-29
  • X社区推广