好吧,写这篇文章是为求教。
行里要上线的一个信用卡积分兑换网站已经开发完毕了,由于我们行的信用卡用户不多大约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
分享到:
相关推荐
在压缩包文件`CometTest`中,可能包含了一个简单的Comet实现示例,你可以通过学习和运行这个例子来深入理解Servlet3.0异步处理和Comet页面推送的工作原理。通过实践,你可以更好地掌握如何在实际项目中利用这些技术...
综上所述,这个"Servlet 3.0异步推送聊天室"项目展示了如何利用Servlet 3.0的异步处理和推送技术构建一个实时交互的应用。通过理解和实践这些技术,开发者可以构建出更加高效、响应迅速的Web应用程序。
总的来说,Servlet3.0通过增强的注解配置、异步处理、过滤器改进、上下文参数和监听器的注解支持,以及微容器概念,极大地提升了Java Web开发的效率和便利性。这份参考手册无疑是深入理解和掌握Servlet3.0技术的关键...
2. **异步处理**:Servlet 3.0支持异步处理,允许Servlet在处理请求时释放线程,提高服务器的并发性能。通过`HttpServletRequest.startAsync()`方法启动异步处理,然后在另一个线程中完成业务逻辑,最后调用`...
- 使用Servlet 3.0的异步处理功能时,应避免长时间阻塞主线程,以提高服务器的并发能力。 - 适当地利用注解来减少XML配置,提高代码的可读性和可维护性。 - 对于复杂的Web应用,仍建议使用web.xml进行部分配置,...
2. **异步处理**:Servlet3.0支持异步处理,允许Servlet在接收到请求后启动一个后台线程进行处理,而主线程可以立即返回,提高了服务器对高并发请求的响应能力。通过`HttpServletRequest.startAsync()`方法,开发者...
在本篇文章中,我们将深入探讨Servlet3.0的主要新特性,包括注解、异步处理、容器初始化参数以及模块化部署等。 首先,Servlet3.0最显著的特征之一是广泛使用注解(Annotation)。传统的Servlet配置通常需要在web....
总结起来,"servlet3.0-demo"项目展示了Servlet 3.0的关键特性,包括使用注解声明Servlet、处理文件上传以及异步处理。这些改进极大地提升了开发效率,使得Servlet API更加现代化和易于使用。通过学习这个示例,...
在实际开发中,将这些库导入到项目中,开发者可以利用Servlet3.0的异步处理能力,处理高并发场景下的请求;使用JSTL简化页面逻辑,提升开发效率。同时,由于不再依赖web.xml进行所有配置,项目的部署和扩展也变得...
1. **异步处理**:Servlet 3.0引入了异步处理能力,允许Servlet在请求处理过程中挂起并稍后恢复,而不是阻塞线程,这极大地提高了应用的并发性能。通过`AsyncContext`接口,开发者可以实现非阻塞I/O,以更高效地处理...
这样一来,Servlet 线程不再被阻塞,可以更快地处理其他请求,从而提高了系统的并发处理能力。 为了启用异步处理支持,需要在配置文件 web.xml 或者通过注解的方式来进行设置。例如,使用 web.xml 配置如下: ```...
1. 性能优化:Tomcat 7对内存管理和线程池进行了优化,提高了响应速度和并发处理能力。 2. 支持最新标准:除了Servlet 3.0,还支持JSP 2.2、EL 2.2和WebSocket 1.0等标准。 3. 安全性增强:提供了更多的安全特性,...
一、Servlet3.0的异步支持 1. **异步Servlet**: 在Servlet 3.0之前,Servlet生命周期中的service()方法是同步执行的,这意味着每次请求都会占用一个线程直到响应完成。而Servlet 3.0引入了异步处理,允许开发者将...
Servlet 3.0引入了异步Servlet的概念,允许Servlet容器在接收到请求后返回控制权,而不在主线程中等待响应的完成。这样,开发者可以编写非阻塞的代码,提高系统的并发性能。 3. **WebSocket支持**: 为了适应实时...
通过`HttpServletRequest#getPart()`方法,Servlet3.0支持了MIME类型的自动探测,可以方便地处理多部分表单数据。 9. **初始化参数**: 可以通过注解`@WebInitParam`在类级别定义Servlet的初始化参数,无需在web....
Servlet 3.0引入了非阻塞I/O的概念,允许Servlet容器在等待I/O操作时执行其他任务,从而提高了并发处理能力。这一特性通过`javax.servlet.AsyncContext`接口实现,使得Servlet可以异步处理请求,无需等待I/O操作完成...
通过允许Servlet线程在发起耗时操作后立即返回至容器,将后续的业务处理委托给另一个线程,Servlet3.0大大减少了服务器资源的占用时间,提高了系统的并发处理能力和响应速度。具体而言,当Servlet接收到请求后,可以...
该版本引入了异步Servlet,允许Servlet容器在调用`startAsync()`方法后,将请求挂起并在后台处理。这有助于提高高并发场景下的性能,因为服务器可以释放线程去处理其他请求,而无需等待当前请求完成。 3. **动态...
2. **异步处理**:Servlet 3.0引入了异步处理功能,通过Servlet API的AsyncContext接口,开发者可以将请求挂起并在后台线程中执行耗时操作,从而提高服务器的并发性能。例如,可以使用`startAsync()`方法启动异步...
Servlet 3.0引入了异步Servlet的概念,允许Servlet容器在调用service方法后返回,而不会立即结束请求处理。这使得Servlet可以在后台执行耗时的操作,如数据库查询或远程调用,而不阻塞线程,提高了服务器的并发性能...