隨筆 - 42  文章 - 71  trackbacks - 0
          <2009年7月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          1. 目的

          Sitemesh 是一個(gè)很好的頁面渲染框架,基本上我現(xiàn)在所在項(xiàng)目都是適用sitemesh做頁面框架和整合渲染的,給頁面部分的工作帶來了很大的便利性。

          在sitemesh的文檔中,對(duì)于sitemesh的工作原理給出了一個(gè)圖示,根據(jù)這個(gè)圖可以看出,sitemesh是通過組合適用filter和標(biāo)簽將被渲染頁面的內(nèi)容抽取出來,再整合到一個(gè)統(tǒng)一的框架頁面中去。曾經(jīng)有一段時(shí)間測(cè)試環(huán)境的Websphere服務(wù)器頻繁出現(xiàn)內(nèi)存溢出的問題,在跟蹤內(nèi)存溢出問題時(shí),發(fā)現(xiàn)sitemesh組件使用StringBuffer對(duì)象進(jìn)行大量內(nèi)存申請(qǐng)的動(dòng)作。這就需要檢測(cè)sitemesh具體是如何來分析頁面的,我的猜測(cè)就是將被渲染的頁面中的最終HTML代碼展出到一個(gè)大的字符串,然后根據(jù)關(guān)鍵標(biāo)簽來進(jìn)行分析和內(nèi)容抽取,然后再整合到框架頁面中。先不管sitemesh是用什么方式來分析、抽取和整合的,他對(duì)于內(nèi)存的影響是比較明顯的,所以,本實(shí)驗(yàn)的目的就是比較使用sitemesh和不使用sitemesh時(shí),運(yùn)行期性能是否存在差異。

           

          2. 環(huán)境

          本實(shí)驗(yàn)使用到的環(huán)境如下:

          · OS: Windows XP Professional SP2

          · HW: Intel Core 2 Duo T7300 2.0GHz, 2GB RAM

          · Web Server: Resin 3.2.1

          · Sitemesh: 2.3

          · Test Tool: Load Runner 8.0

          · JDK: Java HotSpot(TM) Client VM 1.5.0_09-b03

          · Analysis Tool: IBM Pattern Modeling and Analysis Tool for Java Garbage Collector 2.5

           

           

          3. 過程

          1. 使用ant example創(chuàng)建sitemesh自帶的example web應(yīng)用

          2. 在sitemesh example應(yīng)用中加入一個(gè)JSP頁面data.jsp,該頁面中包含一個(gè)43行7列的靜態(tài)表格,表格部分的HTML源碼約17KB

          3. 同樣制作上述數(shù)據(jù)的非sitemesh處理頁面data_nosm.jsp,在sitemesh的配置文件decorators.xml中將data_nosm.jsp添加到排除列表

          4. 以展開包的方式部署sitemesh example應(yīng)用到resin服務(wù)器

          5. 設(shè)置resin的JVM參數(shù)為:-Xms64m -Xmx256m -XX:MaxPermSize=256m -Xss1m -verbose:gc -Xloggc:C:/apps/resin-3.2.1/gc.log -XX:+PrintGCDetails

          6. 在Load Runner中制作2個(gè)壓力測(cè)試腳本,一個(gè)用來請(qǐng)求data.jsp,一個(gè)用來請(qǐng)求data_nosm.jsp

          7. 在Load Runner中設(shè)計(jì)壓力測(cè)試場(chǎng)景:10個(gè)用戶,持續(xù)請(qǐng)求5分鐘,每個(gè)用戶的每輪請(qǐng)求中包含10次對(duì)于頁面的請(qǐng)求

          8. 重新啟動(dòng)resin服務(wù)器,進(jìn)行data.jsp的壓力測(cè)試。測(cè)試完成之后,收集Load Runner的數(shù)據(jù)以及GC的數(shù)據(jù)

          9. 重新啟動(dòng)resin服務(wù)器,進(jìn)行data_nosm.jsp的壓力測(cè)試。測(cè)試完成之后,收集Load Runner的數(shù)據(jù)以及GC的數(shù)據(jù)

          10. 數(shù)據(jù)匯總及處理

           

           

          4. 結(jié)果

          根據(jù)測(cè)試的結(jié)果,整理GC部分和壓力測(cè)試部分的數(shù)據(jù)如下:

           

          使用sitemesh

          未使用sitemesh

          GC次數(shù)

          6,746

          74

          Full GC次數(shù)

          1

          1

          GC消耗

          0.02

          0.00

          GC暫停(秒)

          7.00

          0.00

          最大持久代(字節(jié))

          8,388,608.00

          8,388,608.00

          平均持久代(字節(jié))

          6,036,328.00

          6,205,085.00

          最大舊生代(字節(jié))

          61,983,744.00

          59,024,384.00

          平均舊生代(字節(jié))

          42,583,685.00

          31,929,903.00

          最大新生代(字節(jié))

          61,983,744.00

          59,024,384.00

          平均新生代(字節(jié))

          4,426,710.00

          4,610,566.00

          請(qǐng)求次數(shù)

          137,344.00

          198,188.00

          平均每秒請(qǐng)求

          454.78

          658.43

          頁面平均響應(yīng)時(shí)間(秒)

          0.042

          0.029

          上表的數(shù)據(jù)制作成圖表如下(為了便于圖表顯示,部分?jǐn)?shù)據(jù)進(jìn)行了放大):

           

          未命名

          在上表中,GC消耗和GC暫??剂恐笜?biāo)中,未使用sitemesh的情況下顯示為0,是因?yàn)樗玫姆治龉ぞ逫BM Pattern Modeling and Analysis Tool for Java Garbage Collector 2.5的顯示精度不足導(dǎo)致,實(shí)際的并非是真正的0,而應(yīng)該是一個(gè)很小的數(shù)值。

          從數(shù)據(jù)上看,使用sitemesh和不使用sitemesh對(duì)于虛擬機(jī)堆內(nèi)存的使用差異不太大,但是在GC次數(shù)上的差異很大。從GC日志的詳細(xì)信息可以看出,在使用sitemesh時(shí),發(fā)生次要GC(Minor GC)的頻率非常的高,可以推斷在運(yùn)行時(shí)期產(chǎn)生了大量的短生命周期的對(duì)象,然后又迅速的被釋放,GC在新生代就已經(jīng)完成了。主要GC(Major GC, Full GC)在使用sitemesh和不使用的情況下,均發(fā)生了1次,而且這1次主要GC也是在resin啟動(dòng)中發(fā)生的,不是應(yīng)用在進(jìn)行壓力測(cè)試時(shí)發(fā)生的。由于使用sitemesh時(shí)的GC次數(shù)遠(yuǎn)遠(yuǎn)大于不使用sitemesh,所以在整個(gè)測(cè)試過程中,GC上消耗的時(shí)間也是差異非常大的。

          從壓力測(cè)試的探測(cè)可以看出,不使用sitemesh時(shí)完成的請(qǐng)求數(shù)是使用sitemesh時(shí)的144.3%。同時(shí)頁面響應(yīng)時(shí)間也僅為使用sitemesh時(shí)的69.0%。

           

          5. 結(jié)論

          從上述測(cè)試數(shù)據(jù)來分析,使用sitemesh對(duì)于系統(tǒng)性能是有較大的影響的,主要表現(xiàn)在GC的次數(shù)會(huì)顯著增多。建議在大壓力、頁面內(nèi)容大的系統(tǒng)中,慎重選擇sitemesh,并且使用之前對(duì)其帶來的性能影響進(jìn)行一個(gè)較為合理、全面的評(píng)估。

          Technorati 標(biāo)簽: ,,,,
          posted on 2009-07-14 22:17 YODA 閱讀(3361) 評(píng)論(8)  編輯  收藏

          FeedBack:
          # re: Sitemesh對(duì)于性能的影響實(shí)驗(yàn)報(bào)告 2009-07-15 00:00 俊星
          條分縷析,樓主的文章很有嚴(yán)謹(jǐn)縝密啊。  回復(fù)  更多評(píng)論
            
          # re: Sitemesh對(duì)于性能的影響實(shí)驗(yàn)報(bào)告[未登錄] 2009-07-15 09:42 YODA
          多謝俊星兄鼓勵(lì)!  回復(fù)  更多評(píng)論
            
          # re: Sitemesh對(duì)于性能的影響實(shí)驗(yàn)報(bào)告[未登錄] 2009-07-15 09:45 a
          真的很嚴(yán)謹(jǐn),值得學(xué)習(xí)。  回復(fù)  更多評(píng)論
            
          # re: Sitemesh對(duì)于性能的影響實(shí)驗(yàn)報(bào)告 2009-07-15 11:19 ahx
          非常感謝分析,是否可以用一個(gè)實(shí)際項(xiàng)目再測(cè)試一下呢。 例如,我們系統(tǒng)的一個(gè)頁面(非信息展示頁面)一般一個(gè)請(qǐng)求的處理時(shí)間60-80毫秒,這時(shí)會(huì)不會(huì)sitemesh對(duì)性能的影像就可以忽略了呢?   回復(fù)  更多評(píng)論
            
          # re: Sitemesh對(duì)于性能的影響實(shí)驗(yàn)報(bào)告 2009-07-15 11:57 99讀書人
          很不錯(cuò)哦  回復(fù)  更多評(píng)論
            
          # re: Sitemesh對(duì)于性能的影響實(shí)驗(yàn)報(bào)告[未登錄] 2009-07-15 12:18 YODA
          謝謝樓上諸位兄臺(tái)的支持

          to: ahx 如果你的頁面響應(yīng)時(shí)間能夠在系統(tǒng)壓力高峰期控制在60-80毫秒這么短的時(shí)間,那么我覺得sitemesh的影響相對(duì)比重反倒更大,但是絕對(duì)值應(yīng)該很小。其實(shí)用與不用,只要能夠達(dá)到客戶要求的壓力指標(biāo)就可以了,比如客戶會(huì)給定一個(gè)多少并發(fā)的前提下,要求系統(tǒng)達(dá)到多少TPS。一切都是為了滿足需求,呵呵  回復(fù)  更多評(píng)論
            
          # re: Sitemesh對(duì)于性能的影響實(shí)驗(yàn)報(bào)告 2009-07-16 21:20 javafuns
          性能肯定是要受到影響的,尤其是頁面內(nèi)容越多,這種影響應(yīng)該更明顯  回復(fù)  更多評(píng)論
            
          # re: Sitemesh對(duì)于性能的影響實(shí)驗(yàn)報(bào)告 2010-03-20 10:24 rplees
          一串?dāng)?shù)字,然而切讓人付出心血。
          謝謝你的數(shù)字。我找到我所要的答案啦。  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 屏山县| 秦皇岛市| 板桥市| 北辰区| 大厂| 阳山县| 山西省| 龙门县| 沙河市| 辉南县| 汤阴县| 宾川县| 右玉县| 奉化市| 浮梁县| 五大连池市| 禹州市| 桐乡市| 东乌珠穆沁旗| 凤庆县| 汶川县| 华容县| 桦甸市| 古交市| 桑日县| 上饶县| 利津县| 承德市| 固始县| 上犹县| 呼图壁县| 来安县| 玉龙| 黄浦区| 铜梁县| 隆林| 汉沽区| 静安区| 庆元县| 泗洪县| 霞浦县|