suninformation 2011-03-17 17:48
浏览 346
已采纳

Web应用多用户高并发请求相同URL时出现回应结果混乱问题

最近又一个新的问题出现,有客户反映登录后导航菜单树的根分组信息偶尔会出现当前用户加载其它用户数据的现象,应用程序运行环境是四台WebLogic服务器节点,由F5做负载均衡;
前端采用的是ExtJS框架+Ajax技术,业务逻辑代码均采用Servlet实现;
在了解了情况后,首先进行了代码排查,未发现问题;
由于用户的登录信息是保存在Session中的,所以任何用户读取菜单分组信息都是通过相同的URL地址进行请求,考虑会不会是F5有对相同的URL请求有缓存,于是单独写了一个测试程序,同时模拟3个用户登录,对此URL地址做并发请求1000次,结果发现这三个用户中的两个用户的请求回应中确实有4~5 次的回应结果是另外一个用户的菜单分组信息;
我所了解的缓存一般都是通过请求URL地址去匹配的,于是我将URL参数进行了变化,即每次请求的URL都加上一个随即数,用于区别为不同的请求,重新执行了模拟登录并发操作,结果还是一样!
这是怎么回事儿呢,现在想脱离F5(此设备由其它厂商维护,不请楚具体设置),采用直接向WEB应用做并发测试,于由公司的服务器都是普通的PC,并发大了就无响应了,正在积极解决此问题!
在这里发贴是想请教各位,有没有遇到过此类问题的?帮兄弟分析一下,给个思路!
问题补充

gaofei_upc 写道
suninformation 写道
最近又一个新的问题出现,有客户反映登录后导航菜单树的根分组信息偶尔会出现当前用户加载其它用户数据的现象,应用程序运行环境是四台WebLogic服务器节点,由F5做负载均衡;
前端采用的是ExtJS框架+Ajax技术,业务逻辑代码均采用Servlet实现;
在了解了情况后,首先进行了代码排查,未发现问题;
由于用户的登录信息是保存在Session中的,所以任何用户读取菜单分组信息都是通过相同的URL地址进行请求,考虑会不会是F5有对相同的URL请求有缓存,于是单独写了一个测试程序,同时模拟3个用户登录,对此URL地址做并发请求1000次,结果发现这三个用户中的两个用户的请求回应中确实有4~5 次的回应结果是另外一个用户的菜单分组信息;
我所了解的缓存一般都是通过请求URL地址去匹配的,于是我将URL参数进行了变化,即每次请求的URL都加上一个随即数,用于区别为不同的请求,重新执行了模拟登录并发操作,结果还是一样!
这是怎么回事儿呢,现在想脱离F5(此设备由其它厂商维护,不请楚具体设置),采用直接向WEB应用做并发测试,于由公司的服务器都是普通的PC,并发大了就无响应了,正在积极解决此问题!
在这里发贴是想请教各位,有没有遇到过此类问题的?帮兄弟分析一下,给个思路!


如果是缓存问题的话,使用时间标签试一下,随机数也不能保证不重复吧


使用了前缀进行了区分,不同的用户登录时其前缀不同,不会存在重复的情况,请求的JS测试代码如下:
for (var times=0; times <1000;times++) {
this.times = times;
Ext.Ajax.request({
url :"/app/treeservlet?id=root&node=root&type=first&times=_num_" + this.times,
method : "POST",
scope : this,
success : function(response){
AppUtils.Log.debug('加载分组:' + response.responseText);
}
});
}
  • 写回答

2条回答 默认 最新

  • finallygo 2011-03-18 09:36
    关注

    个人认为是代码的问题,有没有考虑线程安全?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备