Spring MVC 和 Struts2 是现在比较流行的 java web MVC 框架。这两个框架都有广泛的应用。至于两个框架的优劣,众说纷纭,这里我也不想搀和到争论之中。我所关注的是两个框架的性能如何。最近利用 ApacheBench 做了一下测试。结果显示,两者之间的性能相差不大, Spring MVC 并没有绝对的优势。
我的测试环境是在 HP 一台服务器上进行的。这台服务器拥有 Intel(R) Xeon(R) CPU E5530 @ 2.40GHz 四枚。每个 CPU 四个核。 16G 内存。 64bit Red Hat Enterprise Linux Server release 5.4 操作系统。
Web 服务器采用 tomcat 7.0.12, 未做特别的优化,只是将 Connector 的 protocol 换成 Http11NioProtocol 的处理方式 :
<Connector executor="tomcatThreadPool"
port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="1000" minSpareThreads="50"
acceptCount="1000"
connectionTimeout="20000"
redirectPort="8443" />
为了避免数据库的操作对测试的影响,测试用的 Web 应用程序都只是一个简单的 Hello world 程序。 Spring Helloworld 程序通过 Annotation 定义了一个 Controller 类,设置了一个 message, view 是一个 jsp 页面,用来显示这个 message 。 Struts2 Helloworld 程序实现了一个 Action, 里面定义了一个 message, 一个 jsp 页面用来显示这个 message 。 总之,这两个程序逻辑基本相同,程序简之又简。
作为比较,每次测试时还测试 tomcat root 下的 index.jsp 文件,用以和使用 Spring/Struts2 框架的应用程序进行比较。因为 index.jsp 文件 byte 数要比这两个框架的应用程序大的多,关于 ROOT 的测试数据仅供参考。
测试时发现针对同一框架应用相同的测试方法,得到的测试结果也不尽相同。多多少少有 0.01ms 的误差。
Spring MVC 的版本是: 3.1.0.M1
Struts2 的版本是: 2.2.3
下图是测试结果比较:
从图上看出, spring,struts2 和 root 线基本重合。考虑到测试结果的误差,基本可以看作两者在性能上并没有太大的差别。