1 问题描述
某年某月某日某系统开发商反馈有一个新功能需求上线后,界面没有正常显示出来。却还是呈现出旧的功能,直接影响用户使用。
2 系统环境
操作系统: Redhat6.4
JDK版本: JDK1.6
Db版本: Oracle 11.2.0.4 RAC
中间件版本:Apache Tomcat/6.0.33
集群:否
3 故障处理过程
3.1故障分析
开发商说:该功能是一个webservice接口,新增了一栏buinessScope值,但代码已经发布到生产系统,但没见功能生效。测试环境有测试过是正常的。
那好让我们来看看效果,直接通过浏览器访问生产系统地址http://ip:8080/aixs2/webservice/tsfsf?wlsd,确实没有这个buinessScope这一栏代码,再去登录测试系统确实有buinessScope这一栏代码。
生产系统界面
|
测试系统界面
|
很奇诡吧
分析思路:
1、该功能代码是否有生产,是否现在生产环境代码还是老代码。
2、Tomcat的缓存机制会不会有问题。
接下来我们分析第一种情况
代码文件路径:axis2.war/oracle/apps/po/weServices/entities/OrderInfo.class
找到生产环境和测试环境md5值一致,应该不会存在代码没有上线
[root@pdcws-vm-szzb entities]# md5sum OrderInfo.class <<-----生产环境 e41d409f073cce04898b8e5b04441256 OrderInfo.class [tomcat@pdcws-szzb entities]$ md5sum OrderInfo.class <<-----测试环境 e41d409f073cce04898b8e5b04441256 OrderInfo.class |
还是有点怀疑,需要再次确认代码,于是去生产环境将OrderInfo.class下载下来进行反编译检查一下。

看了反编译后的代码,确实这个功能在生产系统已上线,通过以上分析我们可以排除代码问题。
接下来我们分析第二种情况
1、清空浏览器缓存
2、检查tomcat服务是否有设置自动缓存清理机制,检查配置文件conf/server.xml,结果发现没有reloadable=true缓存清理机制。
3、手工清理缓存axis2功能项目
rm –rf $TOMCAT_HOME\work\Catalina\localhost\axis2
重启tomcat服务后,果然代码已生效,原来是缓存问题导致。
3.2故障原因
其原因是缓存机制出现了问题,对于新增xml,jsp,class代码文件web容器没有对其进行自动重编,最后会导致代码不生效。
4 解决方案
1、设置自动缓存清理机制conf/server.xml,结果发现没有加上reloadable缓存清理机制。
2、发布新功能提前,提前手工清理缓存。






