分享

sitemesh性能测试结果比较惊艳(已经补上新的对比测试结果)

 CevenCheng 2011-06-30
最近想在一个项目中使用sitemesh作为view层的装饰器,于是今天就做了一下sitemesh的性能测试。 
由于只是测试view层的性能,所以系统框架只有了spring mvc3(3.0.3)+freemarker(2.3.16)+sitemesh(2.4.2) 
servlet容器:jetty-6.1.21 
jdk:1.6.0_17-b04 
压力测试工具:loadRunner 8.1 
应用服务器配置:8cup    Intel(R) Xeon(R) CPU   E5410  @ 2.33GHz;   内存:4G 
测试代码: 
Java代码  收藏代码
  1. @Controller  
  2. public class TestController {  
  3.     @RequestMapping(value="/hello", method=RequestMethod.GET)  
  4.     public void sayHello(Model model){  
  5.         model.addAttribute("timestamp",new Long(System.currentTimeMillis()));  
  6.     }  
  7. }  

freemaker代码 
Xml代码  收藏代码
  1. <html>  
  2. <head>  
  3.     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />  
  4.     <meta http-equiv="Cache-Control" content="no-store"/>  
  5.     <meta http-equiv="Pragma" content="no-cache"/>  
  6.     <meta http-equiv="Expires" content="0"/>  
  7. </head>  
  8.     <title>freemarker title</title>  
  9. <body>  
  10. <#list 1..100 as r>  
  11. <#list 1..1000 as xx>  
  12. <h5>${timestamp%xx}</h5>  
  13. </#list>  
  14. </#list>  
  15. </body>  
  16. </html>  

sitemesh相关配置: 
Xml代码  收藏代码
  1. web.xml:  
  2.     <filter>  
  3.         <filter-name>sitemesh</filter-name>  
  4.         <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>  
  5.     </filter>  
  6.       
  7.     <filter-mapping>  
  8.         <filter-name>sitemesh</filter-name>  
  9.         <url-pattern>/*</url-pattern>  
  10.     </filter-mapping>  
  11.   
  12. decorators.xml  
  13. <decorators defaultdir="/decorators">  
  14.     <!-- Any urls that are excluded will never be decorated by Sitemesh -->  
  15.     <excludes>  
  16.         <pattern>/exclude.jsp</pattern>  
  17.         <pattern>/exclude/*</pattern>  
  18.     </excludes>  
  19.   
  20.     <decorator name="main" page="main.jsp">  
  21.         <pattern>/*</pattern>  
  22.     </decorator>  
  23. </decorators>  

装饰器页面main.jsp: 
Html代码  收藏代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ taglib uri="http://www./sitemesh/decorator" prefix="decorator" %>  
  4. <%@ taglib uri="http://www./sitemesh/page" prefix="page" %>  
  5.   
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www./TR/html4/loose.dtd">  
  7. <html>  
  8. <head>  
  9.     <title><decorator:title default="Mysterious page..." /></title>  
  10.     <decorator:head />  
  11. </head>  
  12. <body>  
  13. <h1>header</h1>  
  14.              <decorator:body />  
  15. <h1>footer</h1>  
  16. </body>  
  17. </html>  

30用户并发访问上面页面,jetty启动时没有使用任何jvm优化参数 
不使用sitemesh时的测试结果 
 
Visualvm的监控截图 
 
使用sitemesh时的测试结果 
 
Visualvm的监控截图 
 

从上面这些测试结果来看sitemesh对页面平均响应时间的影响还是比较小的,这个影响我觉得基本可以接受。 
但是从Visualvm的监控结果让我非常的惊讶,使用sitemesh以后使得jvm的内存使用剧增,是未使用之前的10倍之多,与此同时cpu的使用率也是原来的3-4倍,由于内存使用量的剧增导致jvm的GC也频繁了许多。 


新做的一轮测试,供大家参考 
参考 rapid-framework的继承实现方式得到的测试结果 
 
 

参考老外搞的freemarker layouthttp://richardbarabe./2009/03/19/freemarker-a-brief-example/ 实现方式得到的测试结果 
 
 

从上面这一轮测试可以看出来这两种方案的实现效果在页面响应时间上差不多,基本没有区别。内存波动也大致相同,唯一差别较大的是,使用rapid测试的场景cpu的使用率波动较频繁,而使用宏实现的装饰器cpu波动较少,CPU使用率相对较低。 
此外使用rapid的场景中线程数的波动图较其他几个场景的波动要明显,不过在测试的时候我没有注意到这个情况,所以目前还不知道线程数量增多的原因。我怀疑是在这个场景下由于请求处理的稍微慢一些,导致VVM统计的活动线程数要高于其他场景。 
希望以上这些测试结果对大家有参考意义。 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多