struts springmvc 比较
引用:http://mlw2000.iteye.com/blog/1072765?page=2#comments 评论参考
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不会有本质的性能区别。