`
mlw2000
  • 浏览: 37114 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

用测试来对比分析struts与springMVC的性能

阅读更多

1 前言

    这篇帖子应该发布在一个月前,因为iteye的发帖机制调整,问答积分的限制把俺堵在了大门外。
    写这篇文章是因为个人一直存在一些疑问:
    a. struts的性能到底怎么样?
    b. springMVC相比struts高多少?
    我这个人呢,有个缺点————总是要看到数据才甘心。可能是专家们被忽悠太多次,以至于心里有阴影了,嘿嘿。

 

2 测试准备

    2.1 测试工具:apache ab(简单实用,load runner就不搞了)
    2.1 系统环境:OS: Red Hat EL 5(64bit),  CPU: Intel Xeon E5310 1.60GHz(单颗4核cpu),  Mem: 4G
    2.2 软件环境:Tomcat 6.0.23, jdk 1.6.0_23, Struts2.2.3测试用war包, SpingMVC3.0.5测试用war包。
        2.2.1 tomcat jvm参数仅调整了堆大小为2G:JAVA_OPTS="$JAVA_OPTS -server -Xms2048M -Xmx2048M"
        2.2.2 测试的代码是从url简单传入1个参数,经过mvc的处理后渲染成html页面

 

3 测试过程

    3.1 部署两个war包到同一个tomcat下
    3.2 预热测试,先跑两次测试进行预热,已使结果更稳定
    3.3 通过浏览器请求拿到两个JSESSIONID以备使用,使用包含JSESSIONID的cookie,可以排除每次重新生成session造成的影响。
    3.4 测试并记录结果

 

4 测试结果

    4.1  ab参数 ab -n 10000 -c 10
            RPS每秒处理的请求数     TPR平均响应时间(毫秒)
            struts2.2.3 spring3.0.5     struts2.2.3 spring3.0.5
    第一次 4308     6439         2.321     1.553
    第二次 4150     5873         2.409     1.703
    第三次 3904     6389         2.561     1.565
    平均值 4121     6234         2.430     1.607

    4.2  ab参数 ab -n 10000 -c 10  -C JSESSIONID=XXXXXXXXXX
            RPS每秒处理的请求数     TPR平均响应时间(毫秒)
            struts2.2.3 spring3.0.5     struts2.2.3 spring3.0.5
    第一次 3803     6560         2.629     1.524
    第二次 4221     6965         2.369     1.436
    第三次 4180     6683         2.392     1.496
    平均值 4068     6736         2.463     1.485

 

5 结果分析

    5.1 从TPS上看,sping比struts吞吐量高66%
    5.2 从TPR上看,sping比struts响应速度高40%
    5.3 我们根据TPR和TPS的数据得出如下坚定的结论:“大家尽可能的用spring吧,springMVC比struts快50%以上!”

 

6 个人见解

    我们真的能从测试结果得出“sping比struts吞吐量高66%;响应速度高40%;springMVC比struts快50%以上”的结论吗?
    在整理好结果的第一个小时内,我也是这么认为的,但是我总觉得有不妥之处,以至于后来我推翻了自己之前的想法,原因其实很简单————我们选择了错误的测试用例。
    测试case只需要极其简单的运算,没有其他消耗系统资源的操作(比如db的存取):
    http://127.0.0.1:8080/struts2/example/hello-world.action?name=name
    http://127.0.0.1:8080/spring3/example?name=name
    对于这么简单的运算,struts及sping约等于空转状态,这个测试能得出的结果是”springMVC与struts的空转响应时间是1.5和2.5毫秒“。
    由此得出:如果我们的系统本身的响应时间超出300毫秒,那么采用springMVC与struts的任一个框架,对性能的影响都在1%左右。对于一个不是要求响应在10毫秒以内的系统,采用springMVC或者struts不会有本质的性能区别。

 

7 结束语

欢迎直接指出问题.
ps:拒绝人身攻击(程度较轻可忽略).

 

分享到:
评论
31 楼 aiou 2013-06-28  
为什么你测试的springmvc吞吐量达到这么高,我的机器配置比你的好多了,但是只到500/s
jsp能到13000/s,
求教!
30 楼 husituo 2012-06-18  
嗯说的不错,谢谢你。我相信你了,我不去测试了。呵呵
(关键是我不会测试,有空学一下去。)
29 楼 magicgrass 2011-06-10  
试着回复下
28 楼 skzr.org 2011-06-10  
<div class="quote_title">idle_sun 写道</div>
<div class="quote_div"> "spring 生态"的活跃程度太高了。。 我也是spring的狂热者, 只不过以前对spring mvc印象不是很好, 抽空去看看spring3mvc(spring mvc居然有那么多粉丝了)....</div>
<p> </p>
<p> </p>
<ul>
<li>曾经我也是用了struts1后准备使用spring mvc(08年左右),不过那个时候spring mvc太复杂,并且不好维护,看到struts2,就转移到struts2上去了。使用struts2大约有3年经验,感觉过度灵活了,绝大多数的灵活性实际上整个项目中都用不上的。<br><br>
</li>
<li>去年6月份,开始重新接触spring3的mvc,看了其showcase后,深深迷恋了,这个就是我需要的,仅此而已。<br><br>
</li>
<li>当时也抉择:struts2已经开发一些interceptor,现在到spring中,还需要重新设计。尝试按照spring的方式思考问题,对比struts2的方式,感觉spring的方式更加合适设计——所以一直在使用spring3 mvc。</li>
</ul>
<p> </p>
<p> </p>
<div style="font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff; margin: 8px;">
<div class="quote_title" style="font-size: 12px; color: #000000; font-weight: bold; margin-top: 5px; margin-right: 0px; margin-bottom: 0px; margin-left: 15px; padding: 5px;">wuzaizhong283 写道</div>
<div class="quote_div" style="font-size: 12px; color: #000000; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 15px; background-color: #fafafa; padding: 3px; border: 1px solid #cccccc;">麻烦你把struts2的default  interceptor stack 中不必要的 interceptor 去掉几个,就有好一点的结果了,难道你做系统是不调整的吗,这真用的时候有些interceptor可以合并的,有的可以去掉的。</div>
<p style="margin: 0px;">我测试的时候是使用struts2,<span style="color: #ff0000; font-size: small;"><strong>关闭struts2的开发模式</strong></span>,配置一个<span style="font-size: 12px; color: #ff0000;"><strong>空的缺省interceptor栈</strong></span>。</p>
<p style="font-size: 12px; color: #000000; margin: 0px;"> </p>
<p style="margin: 0px;"> </p>
<div class="quote_title" style="font-size: 12px; color: #000000; font-weight: bold; margin-top: 5px; margin-right: 0px; margin-bottom: 0px; margin-left: 15px; padding: 5px;">Reset 写道</div>
<div class="quote_div" style="font-size: 12px; color: #000000; margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 15px; background-color: #fafafa; padding: 3px; border: 1px solid #cccccc;">Struts2 需要每次都new Action</div>
<div style="font-size: 12px; color: #000000;">这个影响不是很大,就像楼主分析的对于网站整体来说,可能也就影响&lt;1%。除非你的网站访问量非常高,1%的影响也将变得可观。</div>
<div style="font-size: 12px; color: #000000;"><br></div>
<div><span style="color: #ff0000; font-size: small;"><strong>量没有到一定程度,很多问题都不是问题,如果量超过了一定的度,小问题可能都会编程大问题,量变到质变</strong></span></div>
</div>
27 楼 wuzaizhong283 2011-06-10  
麻烦你把struts2的default  interceptor stack 中不必要的 interceptor 去掉几个,就有好一点的结果了,难道你做系统是不调整的吗,这真用的时候有些interceptor可以合并的,有的可以去掉的。
26 楼 Reset 2011-06-10  
Struts2 需要每次都new Action
25 楼 mlw2000 2011-06-10  
我用struts2的方式:弃用struts标签,使用freemarker result生成html、xml,使用json result生成json;
因为吞吐量2000对我来说足够了,
我一直有个疑问想问下roobin,“对于非静态页面,iteye的访问高峰期吞吐量能不能达到2000”?
24 楼 idle_sun 2011-06-10  
"spring 生态"的活跃程度太高了。。 我也是spring的狂热者, 只不过以前对spring mvc印象不是很好, 抽空去看看spring3mvc(spring mvc居然有那么多粉丝了)....
23 楼 idle_sun 2011-06-10  
supben 写道
idle_sun 写道
supben 写道
result里面还支持freemarker呢,10几种!但是一般的项目用的着么?
我的意思就是struts太庞大了啊。

struts tag不用,model-driven不用,validation不用,试问这不就是spring mvc么?


就像spring被抱怨庞大一样,spring的发展注定会集成多的jee技术,一样有老多人在那抱怨什么越来越像ejb, 但是别人spring的模块层次清析,各个部分独立。 集成这么多东西只能说明设计合理扩展性好。  这个道理同样适用于struts2

(ps:反正struts tag不用,有jquery  validation导是非常方便


关键是struts 里面绝大部分工作都被其他更好的代替了,和spring还是不同吧。


可能我落后了,如果真的“大部份工作”都被spring更好的代替的话, 那倒是。

不过我一直欣赏struts2的设计,设计非常棒。  在良好的设计下(扩展性强), “大部份工作”都已经比不上spring了, 只能说struts2社区已经不活跃,没有人提供更好的实现了。
22 楼 supben 2011-06-10  
idle_sun 写道
supben 写道
struts和页面绑定的太多了。
比如数据验证啊,ognl绑定啊。原来解决了很多问题。
但是现在不需要了,jquery,ajax这些东西的存在,比他更方便,效果更好。现在要求的controller仅仅是需要返回一个文件流而已(jsp/json/xml)!

当然,如果你的系统完全是增删改查之间的跳转,那struts2 实在是太方便了。
否则 绝对是spring mvc更好。

struts2扩展性非常好,你说的这些完全可以实现(一个result而以)

而且页面绑定也不是struts最大的亮点,个人一直觉得没大用处,页面有jquery



哥们交个朋友呗,我Q 409123969
21 楼 supben 2011-06-10  
idle_sun 写道
supben 写道
result里面还支持freemarker呢,10几种!但是一般的项目用的着么?
我的意思就是struts太庞大了啊。

struts tag不用,model-driven不用,validation不用,试问这不就是spring mvc么?


就像spring被抱怨庞大一样,spring的发展注定会集成多的jee技术,一样有老多人在那抱怨什么越来越像ejb, 但是别人spring的模块层次清析,各个部分独立。 集成这么多东西只能说明设计合理扩展性好。  这个道理同样适用于struts2

(ps:反正struts tag不用,有jquery  validation导是非常方便


关键是struts 里面绝大部分工作都被其他更好的代替了,和spring还是不同吧。
20 楼 rustlingwind 2011-06-10  
测试之前请将  struts2 的默认拦截器配置修改一下,很多没必要使用的拦截器可以去掉,能提高不少性能。
19 楼 idle_sun 2011-06-10  
supben 写道
result里面还支持freemarker呢,10几种!但是一般的项目用的着么?
我的意思就是struts太庞大了啊。

struts tag不用,model-driven不用,validation不用,试问这不就是spring mvc么?


就像spring被抱怨庞大一样,spring的发展注定会集成多的jee技术,一样有老多人在那抱怨什么越来越像ejb, 但是别人spring的模块层次清析,各个部分独立。 集成这么多东西只能说明设计合理扩展性好。  这个道理同样适用于struts2

(ps:反正struts tag不用,有jquery。  struts2 validation导是非常方便,另外 js在前端做了验证,  不是说服务器端就不用验证。
18 楼 supben 2011-06-10  
这就比如ext和jquery,你ext用就用他整个的。
如果你仅仅是1-2个页面需要那种效果,其他部分仍然是传统的。
那还是该用ext还是jquery呢。
17 楼 supben 2011-06-10  
result里面还支持freemarker呢,10几种!但是一般的项目用的着么?
我的意思就是struts太庞大了啊。

struts tag不用,model-driven不用,validation不用,试问这不就是spring mvc么?
16 楼 idle_sun 2011-06-10  
supben 写道
struts和页面绑定的太多了。
比如数据验证啊,ognl绑定啊。原来解决了很多问题。
但是现在不需要了,jquery,ajax这些东西的存在,比他更方便,效果更好。现在要求的controller仅仅是需要返回一个文件流而已(jsp/json/xml)!

当然,如果你的系统完全是增删改查之间的跳转,那struts2 实在是太方便了。
否则 绝对是spring mvc更好。

struts2扩展性非常好,你说的这些完全可以实现(一个result而以)

而且页面绑定也不是struts最大的亮点,个人一直觉得没大用处,页面有jquery
15 楼 idle_sun 2011-06-10  
异常处理,权限验证,接口日志.......

intercepter真爽,粒度比filter小得多。 \("o")/
14 楼 supben 2011-06-10  
struts和页面绑定的太多了。
比如数据验证啊,ognl绑定啊。原来解决了很多问题。
但是现在不需要了,jquery,ajax这些东西的存在,比他更方便,效果更好。现在要求的controller仅仅是需要返回一个文件流而已(jsp/json/xml)!

当然,如果你的系统完全是增删改查之间的跳转,那struts2 实在是太方便了。
否则 绝对是spring mvc更好。
13 楼 nighty 2011-06-10  
downpour 写道
lnaigg 写道
如果没有高并发的场景,MVC的性能对整个系统影响应该是比较小的。

随着并发量增长,MVC的效率要求会有所提高,但不会是重点。

个人认为,性能瓶颈有90%都出在持久层。

MVC的选型一般会从架构方面、团队认可度方面考虑,不会从性能方面考虑。


所以楼主的分析是完全正确的。

我不知道为什么大家一直在纠结一个MVC框架的性能而不是它的可用度?我们引入一个框架的最终目的是什么?牺牲了哪些又得到了哪些好处?先明确这个问题,再来考虑这些不搭边的因素。


非常赞同,一个项目成功与否,程序开发的过程占的时间比例不高。能否减少代码量、是否开发效率高、易维护、用了框架,能在规定期完成项目才是正常的目标。
再好的框架和程序,交付不了,没有客户,全是浮云!
12 楼 idle_sun 2011-06-10  
<p>首先我承认struts2的性能肯定比不过spring(因为intercepter和prototype).</p>
<p> </p>
<p>但是就我做的项目来说,没有一个项目会在mvc存在瓶颈</p>
<p><span style="color: #888888;"><em>(如果在你的系统中 action 已经是最耗时的一层了 -.-!!  那就换用spring mvc/struts1/servlet吧)</em></span></p>
<p> </p>
<p>struts2的设计非常好,最喜欢的是  intercepter,扩展性非常强,而且用起来也相当简单。struts2的配置也是亮点, 框架扩展性和易用性是我一直选择strurts2的最大的原因!</p>
<p> </p>
<p>但是刚刚在看贴的时候,看到<span><strong>skzr.org</strong><span>老兄说spring3 mvc比strurts2还更好用?</span></span></p>
<p> </p>
<p><span><span>印象中spring mvc的易用性大大落后于struts2,没有深入用过。 如果在性能、扩展性和易用性都非常好的,我可能会换spring3 mvc,也为了"</span></span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 15px;">spring生态"(一直认为"spring生态"中,mvc是最差的一环,所以没有用)</span></p>
<p> </p>
<p>总之,先看看spring mvc再说吧.. 如果是真的话....</p>

相关推荐

    struts1原理,struts2原理,spring mvc原理,struts1和struts2,struts和spring mvc

    Struts1强调使用Form Bean来封装请求参数,通过ActionForm与Action之间传递数据,实现了表现层和业务层的分离。 **Struts2原理:** Struts2是在Struts1的基础上发展起来的,它融合了WebWork框架的许多特性。Struts2...

    springMVC使用文档

    - **性能对比**:由于 SpringMVC 的单例模式和更轻量的设计,理论上其性能优于 Struts2。 #### SpringMVC 执行流程 SpringMVC 的执行流程如下: 1. **请求处理**:用户发起 HTTP 请求至 DispatcherServlet。 2. **...

    SpringMVC快速入门 深入分析

    性能优秀:** SpringMVC的设计理念使得开发者能够轻松编写出高性能的应用程序,这一点在与Struts2的对比中尤为明显。Struts2虽然功能丰富,但由于其复杂的架构(如值栈、OGNL表达式、标签库等)可能会导致性能下降...

    SpringMVC快速入门教程-深入分析

    四、Spring MVC与Struts2对比 尽管Struts2是一个成熟的框架,但Spring MVC因其简单易学、高性能和灵活性成为许多开发团队的选择。Spring MVC的注解配置减少了XML配置的复杂性,而Struts2的值栈和OGNL可能导致性能...

    SpringMVC与hibernate整合12实例

    11. SpringMVC与Struts2对比:分析两种MVC框架的优缺点,理解其工作原理差异。 12. 性能优化:探讨缓存机制,如二级缓存的使用,提高系统性能。 以上实例涵盖了SpringMVC和Hibernate整合的各个方面,对于初学者和...

    springMVC 教程

    作者推荐了SpringMVC作为当前最优秀的MVC框架之一,并与Struts2进行了比较分析,认为SpringMVC在性能上超越了Struts2,并且在易用性和灵活性方面具有明显的优势。 接下来,教程中的核心类与接口部分将介绍SpringMVC...

    springMVC基本理论

    - **Struts vs SpringMVC**:虽然两者都是基于MVC模式的Web框架,但是SpringMVC在配置灵活性、性能优化等方面具有明显优势。SpringMVC更加强调约定优于配置的原则,使得开发效率更高。 - **Spring vs SpringMVC**:...

    SpringMVC.docx

    ### SpringMVC详解 #### 一、SpringMVC概述 **SpringMVC**是Spring框架的一个模块,...通过对SpringMVC底层架构、工作流程及与其他框架的比较分析,我们可以更好地理解其优势所在,并在实际项目中灵活运用这些知识。

    struts2学习笔记

    - **JSP与ASP对比**:JSP本质上是编译后的Servlet,而ASP使用的是未编译的脚本语言,两者在运行效率和安全性上有显著差异。 **Model1与Model2**: - **Model1**:JSP充当了View和Controller的角色,适用于简单的...

    struts帮助文档doc-txt-ppt文档(个人总结,绝对一手好资料).rar

    Struts 是一个开源的Java Web框架,由Apache软件基金会维护,它主要被用来构建基于MVC(Model-View-Controller)设计...同时,了解Struts与其他框架(如Spring MVC)的比较,也有助于我们选择最适合项目的解决方案。

    Spring MVC配置文档及原理介绍

    在运行性能方面,JSP+Servlet组合的性能通常最高,其次是Struts 1,接着是Spring MVC,而Struts 2的性能相对较低,特别是当使用OGNL和值栈时。然而,在开发效率上,这些框架的表现却与性能表现相反,Spring MVC和...

    spring面试题分析

    #### 七、SpringMVC与Struts2的比较 1. **入口差异**:SpringMVC的入口是Servlet,而Struts2是Filter。 2. **性能差异**:SpringMVC通常比Struts2稍快一些,因为SpringMVC是基于方法的设计,而Struts2是基于类的...

    Spring MVC 教程,快速入门,深入分析

    Spring MVC是基于Java的开源MVC框架,它用于简化Web应用开发,是Spring框架的一部分。...本文作者赵磊还撰写了一篇比较Spring MVC与Struts 2以及Servlet的文章,感兴趣的话可以参考其中关于性能对比的测试结果。

    Spring_MVC_教程_快速入门_深入分析

    此外,通过比较Spring MVC与Struts2、Servlet等其他MVC框架,本教程也强调了选择Spring MVC的理由,例如学习成本低、性能优秀、扩展性好等。通过了解这些知识点,开发者可以更有效地利用Spring MVC进行Web开发,提升...

    beetl1.26.04-guide.pdf

    Beetl的附录部分列出了函数、格式化函数、标签、与Freemarker的功能对比以及性能比较等信息。 Beetl的扩展包功能强大,可以自定义函数和格式化函数,以及使用标签等。Beetl还提供了宏支持和空格处理方法。 Beetl的...

    基于SSM的高校校园点餐系统源码.zip

    4. **SSH(Struts2+Spring+Hibernate)与SSM的比较**:SSH是早期的Java Web开发框架组合,其中Struts2负责控制流程,Spring提供DI和AOP,Hibernate处理ORM。而SSM则用SpringMVC替代了Struts2,更轻量级且易于配置,...

    spring mvc学习

    - 一般来说,开发效率与性能成反比,Spring MVC 和 Struts2 在开发效率上相当。 #### 基于 Spring 2.5 的 XML 配置项目实践 **项目搭建步骤**: 1. **建立 Web 项目**:首先在开发环境中新建一个 Web 项目。 2. *...

    JavaEE技术问题汇总.docx

    【Struts2与SpringMVC对比】 Struts2是基于Action的MVC框架,配置相对繁琐。SpringMVC是Spring的一部分,依赖注入强大,配置简洁,性能较好。 【SpringMVC核心组件与运行流程】 核心组件包括DispatcherServlet、...

    Beetl 模版引擎

    它支持多种web框架的整合,如SpringMVC、JFinal、Struts、Nutz、Jodd和Servlet等,并能够单独开发和测试模板,无需M和C部分的参与。Beetl也支持自定义方法、格式化函数、虚拟属性、标签和HTML标签,并允许自定义占位...

Global site tag (gtag.js) - Google Analytics