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);
}
});
}
0
扫码支付0.1元 ×
其他相关推荐
多用户并发数据错乱
调用webservice的方法类用到了static修饰的变量接收返回值。导致页面看到的数据不是根据条件查询出来的数据。
WEB应用中的高并发问题
大型网站,比如门户网站。在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。但是除了这几个方面,还没法根本解决大型网站面临的高负载和高并发问题。这些解决思路在一定程度上也意味着更大的投入,并且这样的解决思路具备瓶颈,没有很好的扩展性,以下从平时的项目经验以及引用一些博客的思路来尝试解决高并发的情况。
关于Ajax多个异步请求出现返回结果混乱的问题
关于Ajax多个异步请求出现返回结果混乱的问题 Synchronous &amp;amp; Asynchronous 1. Synchronous(同步) function myfunction(){ //dosomething } myfunction(); //doSomethingElse 在这里dosomethingElse会等myfunction方法体执行完毕后再执行,...
java高并发全局变量共享问题(解决多个用户同时访问造成数据错乱)
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;先看下面问题:多个线程访问全局变量x,然后将x与i累加,启动10个线程,想让每个线程的输出结果都是一样的55,但是实际不是的。 package ThreadTest; public class Counter { private int x...
response返回的请求出现混乱的问题的处理,中间件是tomcat8
中间件: tomcat8   tomcat7 问题: response返回的请求出现混乱的问题的处理 描述: 假定请求A正确返回的response的数据应该是aaaaaa  ; 请求B正确返回的response的数据应该是bbbbbb;在压力较高时(有时压力也不大,仅仅是请求的处理时间较长),出现请求B返回的数据是 aaaaaa bbbbbb;即请求B的返回值将其他的请求的返回值也包含到了自身
web 应用在瞬间高并发时候会遇到的问题
当一个web应用处于高并发的运行状态时,经常会出现一些意想不到的异常1.内存溢出2.操作系统单个进程线程创建上限限制,超过上限会抛异常3.处理线程过度,响应速度过慢,甚至超时等确定瓶颈后寻找解决方案...
使用ThreadLocal却出现了有并发问题?
最近同事发现所做的app在未登陆的情况刷feed的时候,相同参数请求,返回的结果确不稳定。于是找到我帮忙排查问题。 听到问题第一反应应该是并发场景下数据安全的问题,于是clone了他们的项目,对着代码开始排查。 使用的是springmvc,每个Controller(单例)都继承于一个BaseController,BaseController实现了IWebContext接口,注入了reque
项目中遇到的经典问题1==同步登录的数据,高并发的时候会出现同步两条相同数据
多用户并发访问导致的错误
2015年最后一个晚上聚会22:00多回到家,发现与客户交流群中满当当的一堆消息,客户反馈二手车系统照片不显示了。重启 Tomcat 之后问题解决,但是没有找到导致问题的原因。元旦早上客户又反馈有一辆车的认证报告和检测证书数据不一致,看来这个元旦注定要在加班中度过了。检查发现检测证书是另外一辆车的数据。从服务器把系统日志取下来,发现是两台微机同时审核数据生成检测证书PDF文件的时候出错的。日志如下
高并发重复请求的去重处理
最近碰到一个重复提交请求,并能在数据库重复插入多条同样数据的问题。因为需求涉及到的是给用户发放购物卡,直接关系到的是金钱,所以是影响很大的一个问题,比如给一个用户发放100元一次,结果被某些居心不良之人抓到包,直接复制一百个请求,然后在执行就相当于给用户直接发放100元100次了,后果可想而知是非常严重的,所以必须的赶紧解决。       问题还原:在页面点击购物卡审核通过按钮,然后利用抓包工具
大型网站是怎样解决多用户高并发访问的
为了解决大型网站的访问量大、并发量高、海量数据的问题,我们一般会考虑业务拆分和分布式部署。我们可以把那些关联不太大的业务独立出来,部署到不同的机器上,从而实现大规模的分布式系统。但这之中也有一个问题,那就是用户如何选择相应的机器的问题,这也被称为访问统一入口问题,而解决的方法是我们可以在集群机器的前面增加负载均衡设备,实现流量分发(总图如下)。 这里得先解释一下何为“负载均衡”,负载均衡就是
解决并发导致数据异常问题
通常我们数据异常是由于并发导致的,那么我们如何避免这种问题呢? 举例: 当用户买充值卡时,我们一般会先查取数据库,然后改数据状态,给用户返回充值卡号,那问题来了 当同一时刻的用户一起购买充值卡时,就可能造成买到同一个充值卡,从而导致数据异常 解决方案: 1、如果并发并不是很高的情况下,我们可以考虑悲观锁,利用排它锁我们可以来使数据保持正常,但是在高并发的情况下,有可         能会...
高并发重复请求的去重处理(转)
最近碰到一个重复提交请求,并能在数据库重复插入多条同样数据的问题。因为需求涉及到的是给用户发放购物卡,直接关系到的是金钱,所以是影响很大的一个问题,比如给一个用户发放100元一次,结果被某些居心不良之人抓到包,直接复制一百个请求,然后在执行就相当于给用户直接发放100元100次了,后果可想而知是非常严重的,所以必须的赶紧解决。       问题还原:在页面点击购物卡审核通过按钮,然后利用抓包工具抓到
高访问量高并发问题的一部分解决方案
缓存:一些不常变动的数据可使用缓存技术,如业务需求也可对缓存进行移除变更操作。采用空间换时间,提高用户问效率,同时也可减少数据库访问次数。一般缓存设置在1-5分钟即可,不要小瞧这几分钟,一般高峰期就是那么几分钟啦~~sql:可以对数据库的查询语句进行优化,尽量不使用hibernate这些orm框架自带的做法,这样很耗时,复杂的查询尽量使用原生sql来写,一般还要对你的sql进行执行计划分析索引:在...
关于传入不同参数请求同一Ajax后返回数据显示错乱的问题
问题描述:   有时候页面显示的下拉框数据需要从数据库中查询,这时就要用到Ajax请求后台,然后把符合要求的结果传递到前台页面,遍历值,然后为下拉框新增选项。  如:输入一本书的名字,分别查询出符合该书名的所有一级分类和二级分类。 你可能会在请求一级分类的Ajax路径里面写"requestPath?category=first" 请求二级分类的Ajax路径里面写"requestPath?c
Jmeter并发测试:重现插入重复数据问题
Jmeter 压力测试工具 直接上图 查询重复数据如下: select count(order_id),order_id,report_type from t_mapping_order_report group by order_id,report_type having count(order_id)&amp;gt;1 解决方案:在两个列上添加唯...
读SDWebImage库系列(1)-如何保证同一时间请求相同URL时,只进行一次网络请求
在一次面试一个ios职位时遭遇到这样一个问题,当一个tableview中许多cell中的uiimageview请求相同地址的图片时,如何保证对于同一url只进行一次网络请求,从而避免没必要的网络请求以提高运行效率。      对于这个问题,如果对于同一url请求,当任何一次请求没完成保存本地缓存时,其他请求先去查看本地缓存,这个时候是找不到的,所以也会发送网络请求,这样确实存在效率问题。  自己
Web应用高并发处理方案
先来熟悉几个关于高并发的关键参数! QPS:每秒处理的请求数量! 响应时间:处理一个请求需要的时间! 吞吐量:单位时间内的处理请求数量! 最大并发数:同一时间能支持的最大请求数! 一般来说有下面这些常规办法: 1,更多的静态资源:将代码中的大量枚举(容器加载时写入map,放入本地缓存),数据库中的定义表(定时任务放入缓存),固定配置,HTML文件等静态化处理,缓存起来! 2,图片服务...
解决jQuery循环调用ajax,异步返回结果混乱
开发中遇到了一个页面中多处需要异步加载字典表中的常量数据,本希望循环调用ajax,却发现ajax回调的结果混乱了,如果解决这一问题?可采用如下方式解决: 上图中的temp变量就能够保证在本次循环中不变,回调函数中也可以再次正确取到。 (funtion(){})();立即执行函数;相当于先申明一个函数,声明完后直接调用; 如果参数如: (funtion(str){alert(st
Spring中多个线程同时访问一个单例类的问题
    Spring默认的类都为单例的,在多个线程同时访问该类并存在成员变量的时候,很可能会造成数据的不同步,以后使用需要注意,遇到要么不用成员变量,要么把该Bean的scope属性设置成prototype....
Redis在多线程高并发下出现数据错乱问题
         公司某个项目使用了redis进行数据的快速写入与查询,但在测试中发现它的查询速度完全不敌MySQL.经过代码分析发现,我们的架构师来了个奇葩操作.Redis与MySQL的关联,也就是先从Redis中查出相关数据在循环查询MySQL来获取完整数据,对于这种操作只能认为架构的脑袋被电梯夹了,在没有什么借口可以解释.好多人都是这样,对新技术有点皮毛了解就想&quot;大显身手&quot;,结果就闹得很是尴...
多用户访问servlet时,Servlet中出现的由多线程引起的问题。
public class MyClass { private String variable1 ; private static String variable2 ; public MyClass(){ } public void method(){ String variable3; } }上面是随手写的一个类,没有任何意义
spring单例在高并发下可能出现的错误
原文地址:http://www.cnblogs.com/atwanli/articles/4740184.html spring单例在高并发下可能出现的错误: 首先,只有当注入的对象是无状态的幂等的才可以保证执行前后不被修改,否则执行一次之后单例对象就会发生改变,在下次执行有肯能造成结果不一样,当在高并发的情况下就会出现,这个线程刚使用单例对象进行属性设置,还未使用的情况下,另一个进程已
【整理】JavaWeb开发的高并发优化思路
一、瓶颈分析 用户高并发场景下(几万级别的QPS) 可能出现的瓶颈分析:     Java虚拟机访问内存:每秒大约1亿次内存读写(不是瓶颈)     MySQL数据库IO:每秒大约4万次读写(不是瓶颈)     网络延迟(毫秒级)+JVM的GC产生全局暂停(毫秒级)+MySQL行级锁(可能是瓶颈) 二、多用户对数据库中同一行数据抢占修改
java web 试题(1)
一、 填空题(每空2分,共30分)  1、在tomcat上发布javaweb应用时的默认目录是webapps_目录。 2、javaweb应用的部署描述符是指   web.xml__ 文件。  3、在tomcat中访问helloapp应用的login.html文件时,在浏览器地址栏应写的url为:http://localhost:8080/helloapp/login.html_。  4、Ser
两个或多个ajax 返回结果一样
有次前端发现 两个Ajax前后请求,响应的结果一样,并且结果是都是最后那个ajax 的结果 : 这是并发安全问题,真正的原因需要你去关注 后端在返回结果时用的实体类(比如:Result),是否用的是局部变量,如果不是局部变量就改为用局部变量,当并发访问时,公共变量是不安全的,容易被另一个请求篡改结果   $.ajax({ url: '${pageContext.req...
在并发环境下,多用户注册防止用户名重复的问题
create procedure insertUser @userName nvarchar(20) as insert into user(name) select @userName from user where not exists(select count(*) from user where name=@userName)   请问大虾们以上写的
同一页面发送多个ajax请求导致数据错乱
1.排查问题: 首先运行一个ajax请求看,请求返回数据是否正常;如果不正常说明sql或者后台代码有问题; 如果没问题:说明是发送多个ajax请求时,导致数据错乱; 2.解决问题: a.在第一个ajax请求的回调函数中,调用下一个ajax请求(不建议) b.在控制层使用synchronized(一个线程访问一个对象中的synchronized(this...
大型网站是怎样解决多用户高并发访问
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。 集群主要分为:高可用集群(High Availability Cluster),负载均衡集群(Load Balance Cluster,nginx即可实现),科学计算集群(High Performance Computing Cluster)。 分布式是指将不同的业务分布在不
多用户并发操作的解决方案
【问题】在以前的系统开发中,经常遇到一个同样问题,就是多个用户同时并发操作一条记录,这次在交易系统开发过程中,又出现了这样问题。比如交易商A提交单子,由审核人员B审核,此时A正在修改单位,B也正在查看这条记录,A先修改保存后B再审核保存,导致B审核通过的记录不是他所看到的。 【分析】仔细考虑问题,大概分析了三个方法, 并确定了一个可行的方案,可能还有不完善的地方,但解决现有问题还是绰绰有余的。
打破砂锅看原理,JMeter并发cookie问题小记(相同用户名压力)
1 问题由来     近日,项目使用JMeter进行并发登录的压力测试,原则上使用的用户名应该是不同的,由于环境问题出现了同用户并发登录的情况,但现象与理论上存在偏差。    那么使用相同用户并发的时候服务器是一个session还是多个session?    如果使用同一用户并发对服务器是否起到了压测的作用?    同一用户并发和不同用户并发有什么区别呢?  2 问题复现    带着这几个问题,先...
当一个API中具有多个相同请求的方法时的解决方案
//当一个API中具有多个相同请求的方法时可以使用下列两个特性来解决(这里以POST请求为例) [HttpPost] //首先声明该API的请求方式 [Route(&quot;api/Post/One&quot;)] //然后指定该API的具体访问地址 namespace Specialty.API.Controllers { public class PostController : ApiCo...
两次请求相同的一个URL,会产生缓存问题。
两次请求相同的一个URL,会产生缓存问题。 博文链接:https://weiye.iteye.com/blog/100470
web应用中网站全量访问日志高效记录源代码
关于网站全量访问日志,含session信息、用户请求发出的url信息记录功能,web请求的处理异步。尽量减少空间消耗和时间消耗。     配置方式:web.xml中配置listener &amp;lt;listener&amp;gt; &amp;lt;listener-class&amp;gt;com.zgl.listener.VistLogListener&amp;lt;/listener-class&amp;gt; ...
axios同时多次请求同一个接口(参数不同)导致返回数据混乱
更新:遇到这种情况,首先请后台排查是否是后台问题,我们的项目在遇到不同接口数据也紊乱了之后最终发现是后台问题。。 在这期间前端背了很久的锅,哭 vue项目里使用axios对同一个接口同时进行多次请求导致返回数据混乱,比如:第一次请求返回的数据跑到别的请求返回里 在尝试了一些解决方法之后个人还是建议直接与后台沟通更改接口逻辑,将所有参数放到数组里后台统一接收并返回所有数据再由前端进行数据的拆分...
netty大并发请求问题
多线程并发使用同一个channel java.nio.BufferOverflowException: null at java.nio.HeapByteBuffer.put(HeapByteBuffer.java:183) ~[na:1.7.0_60-ea] at java.nio.ByteBuffer.put(ByteBuffer.java:832) ~[na:1.7.0_60-ea...
一个server搭建多个tomcat的时候session混乱情况及解决
同一台server部署多个tomcat,每个tomcat里部署了同一个app作为不同的环境,在同一个浏览器同事访问不同环境的时候,session会混乱如下 : server1 登录&gt;产生session ID&gt;回传给客户端浏览器 &gt; 客户端进行接下来的操作,request默认会加上JSESSIONID,就是回传的session ID, tomcat根据request里的session ID判断要不...
高并发下重复提交问题的处理
高并发下重复提交问题的解决方案
java模拟并发访问
[code=&quot;java&quot;] package thread; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CountDownLatchTest1 ...
Java模拟用户的高并发请求
package com.jason.mrht.common.utils; import com.jason.mrht.common.exception.HttpException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.CountDownLatch; /*...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java web应用学习 java学习常出现的问题