`
hypercube1024
  • 浏览: 85259 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多
最近觉得struts2性能感觉好差,然后就对struts2和springMVC3分别作了以下性能测试,结果太让人吃惊了!
机器配置是 T6600 + 2G内存

执行一条最简单的查询语句,500线程
select * from folder where fid = '1' order by orderNum

struts2 + spring3 + hibernate 的测试结果



struts2 + spring3 + mock对象的测试结果




spring3 MVC + hibernate 的测试结果




最后是spring3 MVC + jdbc 的测试结果



根据最后两种情况可以看到 hibernate 对性能的损失尚可接受,但是struts2的性能为什么和 spring3 MVC 差这么多 -_-b

最后附上struts2官方的helloWorld例子程序的测试结果





性能也不容乐观。。。。。。
这个是官方的helloworld例子使用的jar包如下
<dependencies>

		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-core</artifactId>
			<version>2.1.8.1</version>
		</dependency>

		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.14</version>
		</dependency>

	</dependencies>


然后是我的 struts.xml 配置文件,log 也已经设置到 ERROR 级别
<struts>

	<constant name="struts.devMode" value="false" />

	<package name="basicstruts2" extends="struts-default">

        <!-- If no class attribute is specified the framework will assume success and 
        render the result index.jsp -->
        <!-- If no name value for the result node is specified the success value is the default -->
		<action name="index">
			<result>/index.jsp</result>
		</action>
		
		<!-- If the URL is hello.action the call the execute method of class HelloWorldAction.
		If the result returned by the execute method is success render the HelloWorld.jsp -->
		<action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">
			<result name="success">/HelloWorld.jsp</result>
		</action>

	</package>

</struts>


  • 大小: 11.6 KB
  • 大小: 13.2 KB
  • 大小: 11.6 KB
分享到:
评论
69 楼 downpour 2010-06-01  
所以结论就是楼主应该放弃使用Struts2,投入SpringMVC的怀抱。

不过我对这个测试挺有兴趣,到达了什么样的标准,可以被楼主定义为“这么差”?
68 楼 hypercube1024 2010-06-01  
Agrael 写道
downpour 写道
hypercube1024 写道
即便单用 struts2 不会出现性能很差的情况,最起码 struts2 和 spring 整合起来用性能很差!另外,我不是还没下结论吗? 你看我开头的几个字 有空试试看,如果真是这样 这不是用的 如果 吗?


你的标题还不能表明你在下结论?“struts2的性能为什么这么差”,这还不叫下结论?

struts2和spring整合是你自己做的,和struts2有什么关系?他们整合的plugin也是第三方提供的。在怎么说,也扯不到struts2的头上去。

一个错误的测试得出的错误结论,引起的结果是什么?是一群完全不懂的人的跟风。你看看之后回帖的人,有多少人认真在做分析?真正的性能测试或者比较,你需要做的工作很多,而不是发几个图就能证明了。

我告诉你这个整合的plugin是造成误导你测试结果的一个重要方面,是我通过struts2的源码分析出来的,是有理论依据的。

的确plugin是很有可能是造成慢的因素之一,所以之前我才问楼主放了哪些包,楼主也说所有。
PS:spring的plugin倒是官方提供的,那个Spring的Object工厂是XWork的一部分。


官方的helloworld例子程序,关闭了开发模式,log是ERROR,性能还是不容乐观-_-b
67 楼 ithero 2010-06-01  
mmwy 写道
如果要说性能,jsp/servlet要比spring mvc、struts2快得多,但是应该没有多少人直接用吧?

选框架其实就是在诸多需求上找平衡,比如客户体验、公司积累、测试能力、功能等等。甚至还会考虑你的人力来源,如果街上培训班都在教struts,而你偏偏要选一个非常偏门的框架,相信你的团队建设成本会比正常的高。

我们现在用struts2,原因:
1、客户体验。到目前为止,目标客户并没有对此提出明确的意见。
2、历史积累。以往项目有大量的webwork/struts2的积累。
3、人力。从主要的人力来源渠道,新人大多有spring mvc、struts2的相关经验,融入团队成本较低。
4、spring mvc存在问题,致使struts2成为最好的选择。
在jboss 4.2.x环境下,如果一个ear中存在两个及以上的webapp,都使用spring/spring mvc的话,会因为classloader的问题造成webapp间spring beanfactory出错,比如A webapp中的spring读了B webapp中的配置。



这才是金玉良言呀,单纯的比较真没意义,现在团队考虑的还是老兄这个。。现在最愁那些什么动不动什么框架好坏,动不动什么性能差的讨论。看问题从来不能只从一点去看待。至少楼主说的用strtus2慢导致项目差点完蛋,但责任推给一个框架是否合适呢?
66 楼 hypercube1024 2010-06-01  
kjj 写道
我被楼主的标题也吓到了,准备刚开始一个项目,很高兴的准备上struts2的,弄得2哦犹豫了几天!!!!!


测试了一下 官方 helloworld 例子程序的情况还是很差, 测试结果已经加到帖子最后
65 楼 hypercube1024 2010-06-01  
downpour 写道
hypercube1024 写道
即便单用 struts2 不会出现性能很差的情况,最起码 struts2 和 spring 整合起来用性能很差!另外,我不是还没下结论吗? 你看我开头的几个字 有空试试看,如果真是这样 这不是用的 如果 吗?


你的标题还不能表明你在下结论?“struts2的性能为什么这么差”,这还不叫下结论?

struts2和spring整合是你自己做的,和struts2有什么关系?他们整合的plugin也是第三方提供的。在怎么说,也扯不到struts2的头上去。

一个错误的测试得出的错误结论,引起的结果是什么?是一群完全不懂的人的跟风。你看看之后回帖的人,有多少人认真在做分析?真正的性能测试或者比较,你需要做的工作很多,而不是发几个图就能证明了。

我告诉你这个整合的plugin是造成误导你测试结果的一个重要方面,是我通过struts2的源码分析出来的,是有理论依据的。


好吧,最后附上了 struts2 官方的 helloworld 例子的测试情况,里面就引用了 struts2-core 这个包,情况依然很差 !
64 楼 kjj 2010-06-01  
我被楼主的标题也吓到了,准备刚开始一个项目,很高兴的准备上struts2的,弄得2哦犹豫了几天!!!!!
63 楼 Agrael 2010-06-01  
downpour 写道
hypercube1024 写道
即便单用 struts2 不会出现性能很差的情况,最起码 struts2 和 spring 整合起来用性能很差!另外,我不是还没下结论吗? 你看我开头的几个字 有空试试看,如果真是这样 这不是用的 如果 吗?


你的标题还不能表明你在下结论?“struts2的性能为什么这么差”,这还不叫下结论?

struts2和spring整合是你自己做的,和struts2有什么关系?他们整合的plugin也是第三方提供的。在怎么说,也扯不到struts2的头上去。

一个错误的测试得出的错误结论,引起的结果是什么?是一群完全不懂的人的跟风。你看看之后回帖的人,有多少人认真在做分析?真正的性能测试或者比较,你需要做的工作很多,而不是发几个图就能证明了。

我告诉你这个整合的plugin是造成误导你测试结果的一个重要方面,是我通过struts2的源码分析出来的,是有理论依据的。

的确plugin是很有可能是造成慢的因素之一,所以之前我才问楼主放了哪些包,楼主也说所有。
PS:spring的plugin倒是官方提供的,那个Spring的Object工厂是XWork的一部分。
62 楼 downpour 2010-06-01  
hypercube1024 写道
即便单用 struts2 不会出现性能很差的情况,最起码 struts2 和 spring 整合起来用性能很差!另外,我不是还没下结论吗? 你看我开头的几个字 有空试试看,如果真是这样 这不是用的 如果 吗?


你的标题还不能表明你在下结论?“struts2的性能为什么这么差”,这还不叫下结论?

struts2和spring整合是你自己做的,和struts2有什么关系?他们整合的plugin也是第三方提供的。在怎么说,也扯不到struts2的头上去。

一个错误的测试得出的错误结论,引起的结果是什么?是一群完全不懂的人的跟风。你看看之后回帖的人,有多少人认真在做分析?真正的性能测试或者比较,你需要做的工作很多,而不是发几个图就能证明了。

我告诉你这个整合的plugin是造成误导你测试结果的一个重要方面,是我通过struts2的源码分析出来的,是有理论依据的。
61 楼 hypercube1024 2010-06-01  
downpour 写道
hypercube1024 写道
downpour 写道
把Struts2中的Spring部分拿掉,再做一次测试,结果会非常不同。


有空试试看,如果真是这样,那 springsource 也太不人道了, 暗中打压竞争对手啊。 单用struts2还是很不爽的,毕竟spring除了MVC之外,其他的那些 任务调度 还有 事务管理 之类 的功能都是很好用的。。。。。。


结论下得为时过早,请先做测试。对于任何有漏洞的测试,是不应该盲目下结论的,你的标题应该改掉。


即便单用 struts2 不会出现性能很差的情况,最起码 struts2 和 spring 整合起来用性能很差!另外,我不是还没下结论吗? 你看我开头的几个字 有空试试看,如果真是这样 这不是用的 如果 吗?
60 楼 笨蛙蛙 2010-06-01  
关注一下 LZ继续
59 楼 kongxx 2010-06-01  
一直不喜欢struts2
58 楼 downpour 2010-06-01  
hypercube1024 写道
downpour 写道
把Struts2中的Spring部分拿掉,再做一次测试,结果会非常不同。


有空试试看,如果真是这样,那 springsource 也太不人道了, 暗中打压竞争对手啊。 单用struts2还是很不爽的,毕竟spring除了MVC之外,其他的那些 任务调度 还有 事务管理 之类 的功能都是很好用的。。。。。。


结论下得为时过早,请先做测试。对于任何有漏洞的测试,是不应该盲目下结论的,你的标题应该改掉。
57 楼 hypercube1024 2010-06-01  
downpour 写道
把Struts2中的Spring部分拿掉,再做一次测试,结果会非常不同。


有空试试看,如果真是这样,那 springsource 也太不人道了, 暗中打压竞争对手啊。 单用struts2还是很不爽的,毕竟spring除了MVC之外,其他的那些 任务调度 还有 事务管理 之类 的功能都是很好用的。。。。。。
56 楼 qchong 2010-06-01  
jansel 写道
Struts2性能差,可能是LZ使用了OGNL表达式和Struts2的Tag。

如果LZ在Action中,直接把数据放在request中,然后JSP中简单写,性能不会这么差的。

晕,那为什么不用servlet直接写呢。。。
55 楼 iaimstar 2010-06-01  
这两天被jsf折磨的万念俱灰

接下来又要被struts2折磨

大家用回jsp+servlet吧,又快又省心
54 楼 downpour 2010-06-01  
把Struts2中的Spring部分拿掉,再做一次测试,结果会非常不同。
53 楼 hypercube1024 2010-05-31  
turionboy 写道
找一些springMVC的中文资料都找不到

官方文档写的很详细啊
52 楼 hypercube1024 2010-05-31  
sw1982 写道
回头看了一下你的第2个图,不是很明白。你测试到的struts2上耗时是多少?

能贴一下测试用到的代码不

hypercube1024 写道
sw1982 写道
用sql测试struts2。。。算是开眼界了。
web机器最重要的指标是并发数,你要么直接剥离struts2出来,用http请求测一下高并发下的耗时,要么老老实实的用sql测试orm



当中有 使用 mock 对象的测试情况,第二张图,可以看到 此时 数据存取耗时只占用了极小的比例,struts2 消耗了大量的时间。

即便使用的数据库访问,但是同样的操作,差距很大还是能说明问题的


public String index() {
		log.info("folder id: {}", folder.getId());
//		if (folder.getId() != null && folder.getId().toString().length() > 0)
//			list = folderService.getChildren(folder.getId());
//		else
//			list = folderService.getChildren(1);
		list = new ArrayList<Folder>();
		list.add(new Folder());
		list.add(new Folder());
		list.add(new Folder());
		list.add(new Folder());
		list.add(new Folder());
		list.add(new Folder());
		return SUCCESS;
	}


第二个测试就是http请求的这个函数,第一个测试就是使用的注释中的代码。注释中的代码访问数据库,第二个则是自己模拟一个List没有访问数据库。你可以对比第一个图和第二个图,就发现那样一条简单的sql其实耗时很小,可以忽略,struts2的耗时占用了大量的比重
51 楼 turionboy 2010-05-31  
找一些springMVC的中文资料都找不到
50 楼 turionboy 2010-05-31  
找一些springMVC的中文资料都找不到

相关推荐

    struts2测试工具

    Struts2是一个非常著名的Java Web开发框架,由Apache软件基金会维护。...无论这个"鬼哥struts2测试工具.exe"具体是什么,理解并掌握Struts2的测试原理和最佳实践都是每个Struts2开发者必备的技能。

    struts2测试案例

    Struts2是一个强大的Java web应用程序框架,用于构建和部署可维护、高性能的MVC(Model-View-Controller)架构的应用程序。它建立在Apache Jakarta的.struts1之上,并吸取了其他框架的优点,如WebWork,提供了更丰富...

    struts2项目开发

    Struts2 项目开发 Struts2 是一个基于 Java Web 的框架,广泛应用于 Web 应用程序的开发。下面将从 Struts2 项目开发的角度,详细介绍 Struts2 框架的应用、开发流程、技术架构、实践经验等方面的知识点。 项目...

    Struts2与Struts1区别

    相比之下,Struts2 为每个请求创建一个新的 Action 实例,避免了线程安全问题。 3. **对 Servlet API 的依赖**: - Struts1 的 Action 直接依赖于 Servlet API,请求和响应对象会传入 execute 方法。而 Struts2 ...

    Struts2全部jar包

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发中广泛应用,为开发者提供了构建可维护、可扩展的Web应用程序的结构。本资源包含的"Struts2全部jar包"是搭建Struts2项目的基础,确保了所有必要的...

    struts2所用到的jar包

    10. **测试支持**:Struts2提供了测试框架,如Struts2 TestNG插件,方便进行单元测试和集成测试,确保应用的正确性。 综上所述,Struts2的核心包和IO包是构建基于Struts2的应用程序不可或缺的部分,它们为开发者...

    Migrating From Struts1 To Struts2

    Struts2以其更加灵活的设计、丰富的特性以及更好的性能表现成为众多开发者的首选。本文将深入探讨如何从Struts1平稳过渡到Struts2,并分析两者之间的主要差异。 #### Struts1概述 Struts1是基于Java的开源Web应用...

    Struts2——教程

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web应用程序框架,它在Struts1的基础上进行了很多改进和增强,提供了更强大的功能和更好的性能。本教程将深入探讨Struts2的核心概念、架构以及实际...

    struts2 lib包

    2. **Struts2 Plugins**: Struts2支持多种插件来扩展其功能,例如Struts2-convention-plugin(基于约定的配置)、Struts2-dojo-plugin(提供Dojo JavaScript库的支持)、Struts2-json-plugin(支持JSON数据格式)。...

    Struts2 in action(struts2实战)

    - 拦截器栈是Struts2处理请求的关键,通过组合不同的拦截器,可以实现复杂的功能,如登录检查、异常处理、性能监控等。 - 自定义拦截器可以通过继承`com.opensymphony.xwork2.interceptor.Interceptor`接口实现。 ...

    struts1和struts2区别

    - **Struts2**:Action对象为每个请求创建一个新的实例,消除了线程安全问题,提高了性能。 3. **Servlet依赖**: - **Struts1**:Action直接依赖于Servlet API,需要HttpServletRequest和HttpServletResponse...

    Struts2漏洞2.0.xx升级为Struts-2.5.12步骤

    在Struts2的早期版本中,尤其是2.0.xx和2.3.28.1,存在一个名为CVE-2017-9791的安全漏洞,这是一个远程代码执行(RCE)漏洞,攻击者可以利用它来运行恶意代码,对服务器造成严重危害。因此,及时升级到修复了这些...

    Struts2的由来

    总的来说,Struts2是结合了Struts 1的广泛采纳和WebWork的创新设计的产物,它通过提供非侵入式设计、强大的数据绑定和可扩展的拦截器机制,为Java Web开发者提供了一个更高效、灵活的开发平台。

    Struts2-2.2.1

    Struts2-2.2.1作为一个基础版本,为开发者提供了稳定的开发平台,同时也为后续版本的更新和发展奠定了基础。在实际开发中,了解并掌握Struts2的核心概念和使用方法,有助于提升Web应用的开发效率和质量。

    struts2,spring

    4. **AOP集成**:Spring AOP可以与Struts2的拦截器一起工作,实现更细粒度的功能,如性能监控、日志记录等。 5. **数据访问**:Spring支持多种数据访问技术,如JDBC、Hibernate、MyBatis等,可以方便地与Struts2...

    struts2简单模拟

    Struts2是一个强大的Java web应用程序框架,用于构建和部署可维护、高性能的Web应用程序。它在Web开发领域中被广泛使用,特别是在企业级应用中,因为它提供了MVC(Model-View-Controller)设计模式的实现,有助于...

    struts2升级到Struts2 2.3.32相关jar包

    这包括单元测试、集成测试以及性能测试,确保升级没有引入新的错误或问题。 7. **回滚计划**:在进行升级之前,最好备份当前的工作环境,以便在升级出现问题时可以快速回滚到旧版本。 8. **文档更新**:更新项目...

    struts2核心包

    Struts2是一个强大的Java web应用程序框架,用于构建和部署可维护、高性能的MVC(Model-View-Controller)架构的应用程序。它是在经典的Struts 1框架基础上发展起来的,旨在提供更优雅、灵活和可扩展的解决方案。...

    struts 2教程资料

    2. **配置文件**:Struts 2使用XML配置文件(通常为struts.xml)来定义Action类、结果页面以及拦截器等。配置文件允许开发者声明性地设置URL映射和处理流程。 3. **拦截器**:拦截器是Struts 2的一个强大特性,它们...

    struts2 发布包

    1. **发布时间**:Struts2 1.3.9发布于2007年,那时的Web开发环境与现在有很大差异,安全性和性能方面可能没有现代版本那么完善。 2. **API限制**:相比后续版本,1.3.9的API可能较为有限,某些功能可能尚未引入或...

Global site tag (gtag.js) - Google Analytics