静态变量惹的祸
问题描述:
最近一用户反应,他们的门户待办偶尔会出现待办数据和列表出不来,出现的频率估计30次出现1次的样子。项目现场的同事经过多次努力后问题依旧,最终这个问题摆在了我的面前.
问题分析解决过程:
1:向项目现场同事了解情况,得知:
- 问题虽然不是每次都出现,但确实可以重现(点了9次后出现了1次)。
- 待办采取的技术是:ajax[自己写的javascript 脚本]+ web service ,采取过兼容更多的XML组建,特殊字符的处理。
2:一下是解决步骤:
2.1 为了方便测试解决的效果和重现问题,用NET写了一个桌面程序自动调用,发现错误时报警,以50次调用为一个测试单元。
2.2 为了排除是程序的问题还是数据库端出了问题,将程序单独部署到一台测试服务器上(连接同样的数据库),用同样测试工具测试200次,发现问题没有出现,基本排除数据库的问题。
2.3 将web service 单独部署到服务器上,测试问题没有出现。
2.4 将首页门户获取数据的服务改为新部署的服务。测试发现原服务问题不再出现,而新服务出现问题了。怀疑问题出现多用户并发后导致。
2.5 跟踪数据库执行的SQl 语句,发现执行一段时间后,执行的SQl 语句变掉。
2.6 看来只能检查源代码了,通过申请要到源代码,通过检查发现如下代码:
//v1.2新增,是否需要从总厂抓取待办数据并进行合并,0:否;1:是。静态变量
private static string __IfUnitData;
//v1.5新增,用户当前样式
private static string _Style;
//v1.6新增,用户id
private static string __UserCode;
//v1.7新增,根据需要,将jigou_url做一个全局变量
private static string __jigou_url;
2.7 程序把属于特定用户的数据定义成静态变量。估计原因就是这里了
2.8 将静态变量改掉,部署后测试问题基本解决,等待生产环境的用户实际效果反馈,从上午9点到下午3点。^_^ 还有两个半小时才下班,可以上上网啦!