`
三月的雪
  • 浏览: 17274 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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

    博客分类:
  • J2EE
阅读更多
  好吧,写这篇文章是为求教。
  行里要上线的一个信用卡积分兑换网站已经开发完毕了,由于我们行的信用卡用户不多大约15000左右,所以给定的系统并发要求是300即可。这个通过编写并发测试案例,已经达到要求。
  但闲来无事,能不能在现有硬件以及架构的情况下,进一步提供系统的并发能力呢?
  之前关注过servlet3.0的异步处理特性。所以我针对系统中的一个核心的交易做了异步调用的改写,通过与原有的写法做并发测试对比,结果。。。
  不使用新特性,直接用原来的一个线程内处理业务逻辑的方式,最大并发能达到900+
  采用新的异步特性后,最大并发只能达到700+
   我的测试环境:
   OS: win 7
   CPU i5 4core
   内存:4G
   服务器:直接在tomcat 7上测试,没有使用apache
   测试工具:JMeter
   测试交易:单笔兑换交易
   tomcat参数设置:
       
           <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
               maxThreads="900" minSpareThreads="150" />
           <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
               processorCache="2000"
               acceptCount="1000" URIEncoding="GBK" useBodyEncodingForURI="true"/>
        

Java代码:
未采用servlet3.0特性,同步处理
public class PointTransAction extends Action{
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
  //这里做了一些业务逻辑,包括连接数据库调用存储过程,日志,向前台返回xml格式的数据等。
}

使用异步处理特性:
  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;
	}
	@Override
	public 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);
	}

	@Override
	public void execute(HttpServletRequest req, HttpServletResponse res) {
           //这里做了一些业务逻辑,包括连接数据库调用存储过程,日志,向前台返回xml格式的数据等。
        }
}


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




后记:这个问题找到了原因,下面文章中会分析。http://grayrabbit.iteye.com/blog/1422684
  • 大小: 51.1 KB
  • 大小: 53.6 KB
  • 大小: 47.4 KB
0
0
分享到:
评论

相关推荐

    Servlet3.0 异步处理 页面推送 Comet 实例

    在压缩包文件`CometTest`中,可能包含了一个简单的Comet实现示例,你可以通过学习和运行这个例子来深入理解Servlet3.0异步处理和Comet页面推送的工作原理。通过实践,你可以更好地掌握如何在实际项目中利用这些技术...

    servlet 3.0 异步 推送 聊天室

    综上所述,这个"Servlet 3.0异步推送聊天室"项目展示了如何利用Servlet 3.0的异步处理和推送技术构建一个实时交互的应用。通过理解和实践这些技术,开发者可以构建出更加高效、响应迅速的Web应用程序。

    Servlet3.0参考手册

    总的来说,Servlet3.0通过增强的注解配置、异步处理、过滤器改进、上下文参数和监听器的注解支持,以及微容器概念,极大地提升了Java Web开发的效率和便利性。这份参考手册无疑是深入理解和掌握Servlet3.0技术的关键...

    servlet 3.0 jar 包综合下载

    2. **异步处理**:Servlet 3.0支持异步处理,允许Servlet在处理请求时释放线程,提高服务器的并发性能。通过`HttpServletRequest.startAsync()`方法启动异步处理,然后在另一个线程中完成业务逻辑,最后调用`...

    servlet3.0.zip

    - 使用Servlet 3.0的异步处理功能时,应避免长时间阻塞主线程,以提高服务器的并发能力。 - 适当地利用注解来减少XML配置,提高代码的可读性和可维护性。 - 对于复杂的Web应用,仍建议使用web.xml进行部分配置,...

    servlet3.0 jar包和doc

    2. **异步处理**:Servlet3.0支持异步处理,允许Servlet在接收到请求后启动一个后台线程进行处理,而主线程可以立即返回,提高了服务器对高并发请求的响应能力。通过`HttpServletRequest.startAsync()`方法,开发者...

    Servlet3.0新特性,Servlet3新特性,Servlet3注解,Servlet3异步处理【蕃薯耀】

    在本篇文章中,我们将深入探讨Servlet3.0的主要新特性,包括注解、异步处理、容器初始化参数以及模块化部署等。 首先,Servlet3.0最显著的特征之一是广泛使用注解(Annotation)。传统的Servlet配置通常需要在web....

    servlet3.0-demo

    总结起来,"servlet3.0-demo"项目展示了Servlet 3.0的关键特性,包括使用注解声明Servlet、处理文件上传以及异步处理。这些改进极大地提升了开发效率,使得Servlet API更加现代化和易于使用。通过学习这个示例,...

    servlet3.0相关的包

    在实际开发中,将这些库导入到项目中,开发者可以利用Servlet3.0的异步处理能力,处理高并发场景下的请求;使用JSTL简化页面逻辑,提升开发效率。同时,由于不再依赖web.xml进行所有配置,项目的部署和扩展也变得...

    servlet3.0 规范pdf 包含javadoc

    1. **异步处理**:Servlet 3.0引入了异步处理能力,允许Servlet在请求处理过程中挂起并稍后恢复,而不是阻塞线程,这极大地提高了应用的并发性能。通过`AsyncContext`接口,开发者可以实现非阻塞I/O,以更高效地处理...

    servlet 3.0新增功能详解

    这样一来,Servlet 线程不再被阻塞,可以更快地处理其他请求,从而提高了系统的并发处理能力。 为了启用异步处理支持,需要在配置文件 web.xml 或者通过注解的方式来进行设置。例如,使用 web.xml 配置如下: ```...

    Servlet 3.0 - Apache Tomcat 7.0.61

    1. 性能优化:Tomcat 7对内存管理和线程池进行了优化,提高了响应速度和并发处理能力。 2. 支持最新标准:除了Servlet 3.0,还支持JSP 2.2、EL 2.2和WebSocket 1.0等标准。 3. 安全性增强:提供了更多的安全特性,...

    Servlet3.0

    一、Servlet3.0的异步支持 1. **异步Servlet**: 在Servlet 3.0之前,Servlet生命周期中的service()方法是同步执行的,这意味着每次请求都会占用一个线程直到响应完成。而Servlet 3.0引入了异步处理,允许开发者将...

    servlet3.0

    Servlet 3.0引入了异步Servlet的概念,允许Servlet容器在接收到请求后返回控制权,而不在主线程中等待响应的完成。这样,开发者可以编写非阻塞的代码,提高系统的并发性能。 3. **WebSocket支持**: 为了适应实时...

    Servlet3.0 新特性

    通过`HttpServletRequest#getPart()`方法,Servlet3.0支持了MIME类型的自动探测,可以方便地处理多部分表单数据。 9. **初始化参数**: 可以通过注解`@WebInitParam`在类级别定义Servlet的初始化参数,无需在web....

    Servlet 3.0规范

    Servlet 3.0引入了非阻塞I/O的概念,允许Servlet容器在等待I/O操作时执行其他任务,从而提高了并发处理能力。这一特性通过`javax.servlet.AsyncContext`接口实现,使得Servlet可以异步处理请求,无需等待I/O操作完成...

    Servlet3.0_新特性

    通过允许Servlet线程在发起耗时操作后立即返回至容器,将后续的业务处理委托给另一个线程,Servlet3.0大大减少了服务器资源的占用时间,提高了系统的并发处理能力和响应速度。具体而言,当Servlet接收到请求后,可以...

    官方servlet3.0.rar

    该版本引入了异步Servlet,允许Servlet容器在调用`startAsync()`方法后,将请求挂起并在后台处理。这有助于提高高并发场景下的性能,因为服务器可以释放线程去处理其他请求,而无需等待当前请求完成。 3. **动态...

    servlet3.0文档html

    2. **异步处理**:Servlet 3.0引入了异步处理功能,通过Servlet API的AsyncContext接口,开发者可以将请求挂起并在后台线程中执行耗时操作,从而提高服务器的并发性能。例如,可以使用`startAsync()`方法启动异步...

    servlet3.0规范

    Servlet 3.0引入了异步Servlet的概念,允许Servlet容器在调用service方法后返回,而不会立即结束请求处理。这使得Servlet可以在后台执行耗时的操作,如数据库查询或远程调用,而不阻塞线程,提高了服务器的并发性能...

Global site tag (gtag.js) - Google Analytics