论坛首页 Java企业应用论坛

struts2的性能为什么这么差,有性能测试截图

浏览 54909 次
精华帖 (2) :: 良好帖 (10) :: 新手帖 (0) :: 隐藏帖 (12)
作者 正文
   发表时间:2010-12-07  
你得出了什么结论
每个测试结果的条件相差太大
建议只修改一个条件测试
0 请登录后投票
   发表时间:2010-12-07  
哎,发现很多人都只停留在“用框架”的阶段,楼主测出来了,你们只知道一味的质疑,就不会自己动下手?概括一下质疑类型
1、hibernate影响了struts,请认真看主贴,LZ同时测试了有数据库操作和没数据库操作的情况;
2、什么spring暗地排斥struts呀,不想说了
3、OGNL和plus 什么XX,可以单纯地用各自MVC部分,你会发现struts还是比spring mvc慢
4、有些人说init的时间长,这个有点道理,但测试的时候可以通过“预热”的办法规避。
5、有些说什么这种测试条件不能代表所有情况的呀,典型的睁眼说瞎话。又不想说了。

其实struts2比spring慢很容易解析,这与struts的设计哲学相关,struts的设计者不在乎对象的多少,在乎的是如何与Servlet解耦,每个请求一个Action实例,可以优雅的OO,QueryString中的parameter会被注入到Action中设置的同名的field中。
那struts产生如此之多的短生命对象,我们就不用它了吗?建议大家都去实现一个自己的MVC框架你也同样会遇到这个问题的。
哥当年自己搞了个很简单的MVC,只实现了核心部分-控制跳转,无非根据一个url调用Action里指定的方法,通过分析字符串,可以将Action的名字和方法名都找到,问题是我每个请求都实例化一个Action吗?哥当年没敢这么做,而是在程序一启动的时候就实例化好所有的Action,当请求到来时找到对应的实例再调用它方法,这样做就要求开发人员不用将与本次请求相关的数据放到Action中,就跟Servlet一样,好处是对象少,坏处是要小心谨慎,自己拿捏吧。
0 请登录后投票
   发表时间:2010-12-07  
接上面的
其实jvm 会自动管理struts产生的大量对象,而对于一个典型的web流程 请求 --> mvc --> dao操作,花费在dao上的时间是最长的,老程序员写的程序大部分的web性能瓶颈都是在db上,这个是没办法的,虽说可以通过db pool和cache技术来缓解。所以说struts上的性能操作比起db来占不到零头,所以大可不必惊慌。
当然,对于精益求精的同学来说,可以通过对比选择最适合的。
另外,我们项目组就在用struts,而且自己有一套框架把ssh整起来了,感觉这些框架就是把程序员当”傻子“,你想犯错都难,而用Servlet,你稍不留神就会犯错了,当然我说的是对于新手。
0 请登录后投票
   发表时间:2010-12-07   最后修改:2010-12-07

关键是看怎么合理搭配使用,Struts2个人觉还好。

 

0 请登录后投票
   发表时间:2010-12-26  
pengzhoushuo 写道
哎,发现很多人都只停留在“用框架”的阶段,楼主测出来了,你们只知道一味的质疑,就不会自己动下手?概括一下质疑类型
1、hibernate影响了struts,请认真看主贴,LZ同时测试了有数据库操作和没数据库操作的情况;
2、什么spring暗地排斥struts呀,不想说了
3、OGNL和plus 什么XX,可以单纯地用各自MVC部分,你会发现struts还是比spring mvc慢
4、有些人说init的时间长,这个有点道理,但测试的时候可以通过“预热”的办法规避。
5、有些说什么这种测试条件不能代表所有情况的呀,典型的睁眼说瞎话。又不想说了。

其实struts2比spring慢很容易解析,这与struts的设计哲学相关,struts的设计者不在乎对象的多少,在乎的是如何与Servlet解耦,每个请求一个Action实例,可以优雅的OO,QueryString中的parameter会被注入到Action中设置的同名的field中。
那struts产生如此之多的短生命对象,我们就不用它了吗?建议大家都去实现一个自己的MVC框架你也同样会遇到这个问题的。
哥当年自己搞了个很简单的MVC,只实现了核心部分-控制跳转,无非根据一个url调用Action里指定的方法,通过分析字符串,可以将Action的名字和方法名都找到,问题是我每个请求都实例化一个Action吗?哥当年没敢这么做,而是在程序一启动的时候就实例化好所有的Action,当请求到来时找到对应的实例再调用它方法,这样做就要求开发人员不用将与本次请求相关的数据放到Action中,就跟Servlet一样,好处是对象少,坏处是要小心谨慎,自己拿捏吧。


每一楼都看了,还是pengzhoushuo说的不错,很多人都是随意意测,如:pengzhoushuo说的1、2、3、4点中已经解释了

貌似大家都浮躁,基本上走马观花的看东西,然后开始下结论了

我的测试结果:
环境:ubuntu desktop 64位,cpu core2 P8400 2.26G, 4G mem
jvm: sun jdk 1.6.0_23 64bit
64位tomcat7:maxThread=10,(运行测试时看到总内存使用了1.4G内存),java_opts=-server
struts2,spring3 mvc,helloworld.jsp(里面只有hello ${message})
用例:
  1. struts2 helloworld.do直接跳转到helloworld.jsp
  2. sprint mvc helloworld跳转到helloworld.jsp
MyEclipse中启动tomcat进行测试:
测试:ab -n 10000 -c 10 多次运行后结论
struts2:低于2000/s
spring3 mvc:4600->6000/s
直接访问jsp : 5000->7000/s

所以现在在突击spring3 mvc,学习下
0 请登录后投票
   发表时间:2010-12-27   最后修改:2010-12-27
skzr.org 写道
pengzhoushuo 写道
哎,发现很多人都只停留在“用框架”的阶段,楼主测出来了,你们只知道一味的质疑,就不会自己动下手?概括一下质疑类型
1、hibernate影响了struts,请认真看主贴,LZ同时测试了有数据库操作和没数据库操作的情况;
2、什么spring暗地排斥struts呀,不想说了
3、OGNL和plus 什么XX,可以单纯地用各自MVC部分,你会发现struts还是比spring mvc慢
4、有些人说init的时间长,这个有点道理,但测试的时候可以通过“预热”的办法规避。
5、有些说什么这种测试条件不能代表所有情况的呀,典型的睁眼说瞎话。又不想说了。

其实struts2比spring慢很容易解析,这与struts的设计哲学相关,struts的设计者不在乎对象的多少,在乎的是如何与Servlet解耦,每个请求一个Action实例,可以优雅的OO,QueryString中的parameter会被注入到Action中设置的同名的field中。
那struts产生如此之多的短生命对象,我们就不用它了吗?建议大家都去实现一个自己的MVC框架你也同样会遇到这个问题的。
哥当年自己搞了个很简单的MVC,只实现了核心部分-控制跳转,无非根据一个url调用Action里指定的方法,通过分析字符串,可以将Action的名字和方法名都找到,问题是我每个请求都实例化一个Action吗?哥当年没敢这么做,而是在程序一启动的时候就实例化好所有的Action,当请求到来时找到对应的实例再调用它方法,这样做就要求开发人员不用将与本次请求相关的数据放到Action中,就跟Servlet一样,好处是对象少,坏处是要小心谨慎,自己拿捏吧。


每一楼都看了,还是pengzhoushuo说的不错,很多人都是随意意测,如:pengzhoushuo说的1、2、3、4点中已经解释了

貌似大家都浮躁,基本上走马观花的看东西,然后开始下结论了

我的测试结果:
环境:ubuntu desktop 64位,cpu core2 P8400 2.26G, 4G mem
jvm: sun jdk 1.6.0_23 64bit
64位tomcat7:maxThread=10,(运行测试时看到总内存使用了1.4G内存),java_opts=-server
struts2,spring3 mvc,helloworld.jsp(里面只有hello ${message})
用例:
  1. struts2 helloworld.do直接跳转到helloworld.jsp
  2. sprint mvc helloworld跳转到helloworld.jsp
MyEclipse中启动tomcat进行测试:
测试:ab -n 10000 -c 10 多次运行后结论
struts2:低于2000/s
spring3 mvc:4600->6000/s
直接访问jsp : 5000->7000/s

所以现在在突击spring3 mvc,学习下


那些开源的框架都是大而全,太多功能其实都用不上,比如国际化、支持多种视图、和其他框架的整合等等,导致响应速度缓慢,现在我自己写了一个mvc框架,很轻量,比struts,springMVC什么的性能好些,性能和纯Servlet差不多吧,使用上就和spring3MVC差不多,也是基于annotation和RestURL的 ^_^
0 请登录后投票
   发表时间:2011-01-09  
好文章,我很喜欢这种较真儿的文章
0 请登录后投票
   发表时间:2011-04-03  
楼主这个性能观察器是自己写的java程序吗?可以共享下吗?先谢谢了
0 请登录后投票
   发表时间:2011-04-03  
LZ精神赞
不过个人觉得,对于struts2的实验,LZ没有做完
这个简单的例子并不能得出LZ的结论
大胆猜测,严谨结论
0 请登录后投票
   发表时间:2011-04-04  
kgd1120 写道
本人觉得struts2性能差是正常的,因为struts2的Action对象是Prototype类型的,而且分离Servelt API时大量的用到Java的反射机制,Java的发射恰恰又是非常影响性能。


Java的发射恰恰又是非常影响性能,据说jdk1.5后差别不大
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics