首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

servlet 3.0异步处置并发测试的疑问

2012-09-07 
servlet 3.0异步处理并发测试的疑问好吧,写这篇文章是为求教。行里要上线的一个信用卡积分兑换网站已经开发

servlet 3.0异步处理并发测试的疑问
  好吧,写这篇文章是为求教。
  行里要上线的一个信用卡积分兑换网站已经开发完毕了,由于我们行的信用卡用户不多大约15000左右,所以给定的系统并发要求是300即可。这个通过编写并发测试案例,已经达到要求。
  但闲来无事,能不能在现有硬件以及架构的情况下,进一步提供系统的并发能力呢?
  之前关注过servlet3.0的异步处理特性。所以我针对系统中的一个核心的交易做了异步调用的改写,通过与原有的写法做并发测试对比,结果。。。
  不使用新特性,直接用原来的一个线程内处理业务逻辑的方式,最大并发能达到900+
  采用新的异步特性后,最大并发只能达到700+
   我的测试环境:
   OS: win 7
   CPU i5 4core
   内存:4G
   服务器:直接在tomcat 7上测试,没有使用apache
   测试工具:JMeter
   测试交易:单笔兑换交易
   tomcat参数设置:
       


Java代码:
未采用servlet3.0特性,同步处理
  public class PointsExchangeAction extends Action{public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {AsyncContext context = request.startAsync();context.setTimeout(20000);new Thread(new PointsExchangeExecutor(context)).start();return null;}}public abstract class Executor implements Runnable{private AsyncContext asyncCtx = null;public Executor(AsyncContext ctx){this.asyncCtx = ctx;}@Overridepublic void run() {try{execute((HttpServletRequest)asyncCtx.getRequest(),(HttpServletResponse)asyncCtx.getResponse());asyncCtx.complete();}catch(Exception e){e.printStackTrace();}}public abstract void execute(HttpServletRequest req,HttpServletResponse res);}public class PointsExchangeExecutor extends Executor{public PointsExchangeExecutor(AsyncContext ctx){super(ctx);}@Overridepublic void execute(HttpServletRequest req, HttpServletResponse res) {           //这里做了一些业务逻辑,包括连接数据库调用存储过程,日志,向前台返回xml格式的数据等。        }}


附件中是两种方式做并发测试结果的截图




后记:这个问题找到了原因,下面文章中会分析。http://grayrabbit.iteye.com/blog/1422684

热点排行