sitemesh性能測試結果比較驚豔

最近想在一個項目中使用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代碼

@Controller  
public class TestController {  
    @RequestMapping(value="/hello", method=RequestMethod.GET)  
    public void sayHello(Model model){  
        model.addAttribute("timestamp",new Long(System.currentTimeMillis()));  
    }  
}  

freemaker代碼 

<html>  
<head>  
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />  
    <meta http-equiv="Cache-Control" content="no-store"/>  
    <meta http-equiv="Pragma" content="no-cache"/>  
    <meta http-equiv="Expires" content="0"/>  
</head>  
    <title>freemarker title</title>  
<body>  
<#list 1..100 as r>  
<#list 1..1000 as xx>  
<h5>${timestamp%xx}</h5>  
</#list>  
</#list>  
</body>  
</html>  

sitemesh相關配置:
web.xml:  
    <filter>  
        <filter-name>sitemesh</filter-name>  
        <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>  
    </filter>  
      
    <filter-mapping>  
        <filter-name>sitemesh</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
  
decorators.xml  
<decorators defaultdir="/decorators">  
    <!-- Any urls that are excluded will never be decorated by Sitemesh -->  
    <excludes>  
        <pattern>/exclude.jsp</pattern>  
        <pattern>/exclude/*</pattern>  
    </excludes>  
  
    <decorator name="main" page="main.jsp">  
        <pattern>/*</pattern>  
    </decorator>  
</decorators>  

裝飾器頁面main.jsp: 

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>  
<%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page" %>  
  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
    <title><decorator:title default="Mysterious page..." /></title>  
    <decorator:head />  
</head>  
<body>  
<h1>header</h1>  
             <decorator:body />  
<h1>footer</h1>  
</body>  
</html>  

30用戶併發訪問上面頁面,jetty啓動時沒有使用任何jvm優化參數 
不使用sitemesh時的測試結果 


Visualvm的監控截圖 


使用sitemesh時的測試結果


Visualvm的監控截圖


從上面這些測試結果來看sitemesh對頁面平均響應時間的影響還是比較小的,這個影響我覺得基本可以接受。 
但是從Visualvm的監控結果讓我非常的驚訝,使用sitemesh以後使得jvm的內存使用劇增,是未使用之前的10倍之多,與此同時cpu的使用率也是原來的3-4倍,由於內存使用量的劇增導致jvm的GC也頻繁了許多。 


新做的一輪測試,供大家參考 
參考 rapid-framework的繼承實現方式得到的測試結果 



參考老外搞的freemarker layouthttp://richardbarabe.wordpress.com/2009/03/19/freemarker-a-brief-example/ 實現方式得到的測試結果 



從上面這一輪測試可以看出來這兩種方案的實現效果在頁面響應時間上差不多,基本沒有區別。內存波動也大致相同,唯一差別較大的是,使用rapid測試的場景cpu的使用率波動較頻繁,而使用宏實現的裝飾器cpu波動較少,CPU使用率相對較低。 
此外使用rapid的場景中線程數的波動圖較其他幾個場景的波動要明顯,不過在測試的時候我沒有注意到這個情況,所以目前還不知道線程數量增多的原因。我懷疑是在這個場景下由於請求處理的稍微慢一些,導致VVM統計的活動線程數要高於其他場景。 
希望以上這些測試結果對大家有參考意義。


原網址:http://seanhe.iteye.com/blog/715100


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章