简露一手-简单处理大型系统应用服务器高CPU故障。
复杂的故事简单说,复杂的问题简单做,您好,这里是简露一手,欢迎浏览。
描述:16-7月,一通讯大型系统月度版本发布后,两台接口服务器接口服务时好时坏,导致外系统卡单。简述顺序:定位-->分析-->处理。
定位
数据库
数据库无锁,会话200[比平常低]。
应用服务器
CPU 98%,另发现除两台接口服务器外发过版本的服务器均高CPU。Linux使用top命令,Aix使用topas命令观察CPU情况。
分析
STEP.1 . 在CPU异常的机器取javacore文件,使用命令kill -3 [进程号]生成javacore文件,生成3~5个。
STEP.2 . 找一台CPU正常应用部署差不多的机器取javacore文件,使用命令kill -3 [进程号]生成javacore文件,生成3~5个[或取异常机器升级前的javacore文件]。
STEP.3 . 打开jca工具,用jca打开javacore文件
Jca工具下载
jcaJavaCore比对
比对处理
STEP.1 . 下载应用所有的jar和class,打开eclipse,创建一个java项目,设置java build path,引入下载下来的jar和class。
设置pathSTEP.2 . 按Ctrl +Shift+T,输入嫌疑的类,找到出处进行判断
查找嫌疑类
STEP.3. 在JDK和webservices-rt.jar里面同时存在这个嫌疑类,初步判断引入新jar后导致在服务器代码引用了webservices-rt.jar里面的XMLDocumentScannerImpl,而webservices-rt.jar里面该类性能极差。尝试在服务器上删除webservice-rt.jar后重启应用CPU恢复正常,验证应用正常,问题解决。
总结:两方面,一是对版本发布前后应用服务器的性能指标需进行观察比对;二是程序开发在第三方jar引入上需要考虑jar的性能以及本地和应用服务器中间件差异并进行适当测试。