日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Struts2、SpringMVC、Servlet(Jsp)性能对比 测试 。 Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照...

發(fā)布時間:2023/12/19 javascript 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts2、SpringMVC、Servlet(Jsp)性能对比 测试 。 Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標準>>>

Struts2、SpringMVC、Servlet(Jsp)性能對比 測試

Servlet的性能應(yīng)該是最好的,可以做為參考基準,其它測試都要向它看齊,參照它。

做為一個程序員,對于各個框架的性能要有一個基本的認知,便于選型時做出正確的決策。

在測試中發(fā)現(xiàn)了什么也不要大喊大叫,因為這些都是Java程序員的基礎(chǔ)知識。 人人都要了解。

---------------------------------------------------------------------------------------

?

建議先閱讀《你想建設(shè)一個能承受500萬PV/每天的網(wǎng)站嗎? 》一文,了解一些測試的基本概念。在測試開始前就有一個性能好與壞的標準。再用這個標準來檢驗?zāi)愠绦颉?/span>

---------------------------------------------------------------------------------------
測試環(huán)境說明:
服務(wù)器: 4G內(nèi)存,至強3.0 (4核超線程)CPU,windows 2003
測試機:筆記本 2G內(nèi)存,p8600 雙核CPU,windows XP
網(wǎng)絡(luò):100Mb局域網(wǎng)
測試軟件:
Jmeter 2.3.4??? 分配了512M內(nèi)存
tomcat 6? 默認內(nèi)存大小

---------------------------------------------------------------------------------------
測試配置如下圖: 其實jmeter還是很弱的,我打開"集合點(synchronizing Timer)","察看結(jié)果樹","用表格查看結(jié)果"中的任何一個都會導致測試結(jié)果中的性能下降和小部分請求的響應(yīng)出錯(可能是線程數(shù)太多了),所以禁用了。只啟用了cookie管理器。


---------------------------------------------------------------------------------------
Tomcat6.0 配置文件的說明 ,做測試之前是要整清楚的。
默認的Server.xml中如下

Xml代碼 ?
  • <Connector?port="8080"?maxHttpHeaderSize="8192"???
  • maxThreads="150"?minSpareThreads="25"?maxSpareThreads="75"???
  • enableLookups="false"?redirectPort="8443"?acceptCount="100"???
  • connectionTimeout="20000"?disableUploadTimeout="true"?/>???
  • ?
    enableLookups
    是否允許DNS查詢,當web應(yīng)用程序要通過域名服務(wù)器查找機器名轉(zhuǎn)換為IP地址時。會使用DNS查詢,需要占用網(wǎng)絡(luò),延長較長
    maxThreads
    Tomcat可創(chuàng)建的最大的線程數(shù),每一個請求須要一個線程來處理,原來的150太小了,我們測試時并發(fā)會超過他的。
    acceptCount
    指定當所有可以使用的處理請求的線程數(shù)都被使用時,可以放到處理隊列中的請求數(shù),就是被排隊的請求數(shù),超過這個數(shù)的請求將拒絕連接。
    connnectionTimeout
    網(wǎng)絡(luò)連接超時,單位:毫秒。設(shè)置為0表示永不超時,這樣設(shè)置有隱患的。通常可設(shè)置為20000毫秒。
    minSpareThreads
    Tomcat初始化時創(chuàng)建的線程數(shù)
    maxSpareThreads
    一旦創(chuàng)建的線程中空閑線程超過這個值,Tomcat就會關(guān)閉不再需要的socket線程。

    注意:maxThreads 設(shè)置為500 ,也就是Tomcat最多同時使用500個線程處理500個并發(fā)(服務(wù)器CPU不錯,500沒問題),不要發(fā)生 排隊等待的情況以免影響測試成績, 為下面的壓力測試做好準備。

    ---------------------------------測試開始了-------------------------------------------
    測試時服務(wù)器CPU使用率 10%
    測試時測試機CPU使用率 100%(測試機不行啊,主要是
    Jmeter的性能一般,又吃內(nèi)存,測試機p8600 雙核CPU還是很強的 )
    每次測試CPU都這樣,就統(tǒng)一寫這里了。

    測試1:JSP頁面--2213個請求/秒
    100并發(fā),循環(huán)100次,共10000個請求,請求一個大小3.34KB的jsp頁面。



    測試2:JSP頁面--1889個請求/秒
    100并發(fā),循環(huán)100次,共10000個請求,請求一個servlet總控制器,驗證權(quán)限后(很簡單),new一個Action,再轉(zhuǎn)發(fā)到一個大小3.34KB的jsp頁面。



    測試3:HTML頁面--2607個請求/秒
    100并發(fā),循環(huán)100次,共10000個請求,請求一個3.2KB的html頁面。



    測試4:
    HTML頁面-- 833個請求/秒
    100并發(fā),循環(huán)100次,共10000個請求,請求一個13.4KB的html頁面。與上面比是只是文件大了一些,把網(wǎng)卡跑滿了 ,網(wǎng)卡成為了性能瓶頸,RPS降了不少!!



    測試5: Spring MVC ? 2012個請求/秒
    100并發(fā),循環(huán)100次,共10000個請求,請求一個spring3 MVC的action,再轉(zhuǎn)發(fā)到一個0.8K的JSP,其內(nèi)容是簡單的html



    測試6:
    Spring MVC ?? 1800-1924個請求/秒
    100并發(fā),循環(huán)100次,共10000個請求,請求一個spring3 MVC的action,兩個參數(shù)類型轉(zhuǎn)換為int、Date,再new 一個List,再轉(zhuǎn)發(fā)到一個1.3K的JSP,用JSTL標簽顯示List中的內(nèi)容。

    JSTL標簽內(nèi)容是如下,看來JSTL標簽性能還是不錯的。

    Java代碼 ?
  • <c:if?test="${empty?list}">???
  • <tr>???
  • <td?align="center">無記錄!</td>???
  • </tr>???
  • </c:if>???
  • <c:if?test="${not?empty?list}">???
  • <tr>???
  • <th>從?1?開始的迭代計數(shù)</th>???
  • <th>從?0?開始的迭代計數(shù)</th>???
  • <th>產(chǎn)品名稱</th>???
  • </tr>???
  • <c:forEach?items="${list}"?var="item"?varStatus="s">???
  • <tr?bgcolor=${s.index%2==0?"#E2E2E2":""}>???
  • <td?align="center">${s.count}&nbsp;</td>???
  • <td?align="center">${s.index}&nbsp;</td>???
  • <td?align="center">${item}&nbsp;</td>???
  • </tr>???
  • </c:forEach>???
  • </c:if>???
  • ?
    測試7: 訪問一張圖片(srping方式一) ? 1997個請求/秒
    100并發(fā),循環(huán)100次,共10000個請求. 因為我使用了spring3 MVC,攔截/,所以圖片不能訪問,所以添加了:

    Xml代碼 ?
  • <servlet-mapping>????????
  • ????<servlet-name>default</servlet-name>????????
  • ????<url-pattern>*.jpg</url-pattern>????????
  • </servlet-mapping>???
  • ?
    走默認的servlet,來訪問2.5K的圖片



    測試8: 訪問一張圖片 (srping方式二) ?? 1967個請求/秒
    100并發(fā),循環(huán)100次,共10000個請求,因為我使用了spring3 MVC,攔截/,所以圖片不能訪問,所以添加了:
    <mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"/>
    來訪問2.5K的圖片,會走spring的可匹配的一個攔截器。

    ?

    ?


    測試9:Struts2? 使用官方提供的示例程序 (使用了Struts2標簽 )? 幾十個請求/秒
    100并發(fā),循環(huán)1次,沒有循環(huán)100次,因為strtus2在這次測試中響應(yīng)太慢了,我等不起了,所以單個url的測試樣本從10000降到了100.一共11個url,共1100個樣本。
    "spring" 使用的就是前面“測試5”的URL,放在這里是為了與strtus2對比的。
    "html"?? 使用的就是前面“測試3”的URL,放在這里是為了與strtus2對比的。
    "struts2-1" 使用的是官方自帶的示例項目,名稱是struts2-blank-2.1.8.1.war
    "struts2-2" 使用的是官方自帶的示例項目,名稱是struts2-showcase-2.1.8.1.war,我在其中隨便選了一個action來做測試
    "struts2-3" 同上
    "struts2-4" 同上
    "struts2-5" 同上
    "struts2-6" 同上
    "struts2-7" 同上
    "struts2-8" 同上
    "struts2-9" 同上
    未對Struts2做優(yōu)化,使用的都是官方帶的示例,Struts2的測試結(jié)果不理想,放在這里做一個參考。“struts2-1”是struts2中測試成績是本次最高的,但也不十分理想。



    測試10:Struts2 ? 官方提供的 示例程序 (使用Struts2標簽--s:property) ? 1192個請求/秒
    上一個測試結(jié)果糟糕的太離譜了,第二天,想了想又開始重新測試,使用的還是struts2官方提供的struts2-blank-2.1.8.1.war示例。

    訪問下面的action: ?? http://192.168.0.5/struts2/example/HelloWorld.action?? ,action內(nèi)容很簡單就是轉(zhuǎn)發(fā)到一個JSP。

    下圖是使用官方示例中默認的action,我沒有修改,結(jié)果如下圖

    這里要說一說轉(zhuǎn)發(fā)到的jsp中的內(nèi)容,其中有struts2標簽,如下:

    Xml代碼 ?
  • <s:property?value="message"/>???
  • <s:url?id="url"?action="HelloWorld">???
  • ?????<s:param?name="request_locale">en</s:param>???
  • </s:url>???
  • <s:a?href="%{url}">English</s:a>??
  • ?

    ?

    測試11:Struts2 ? 官方提供的 示例程序 (不使用Struts2標簽) ? 1976個請求/秒--優(yōu)秀啊

    ?

    我把“測試10”中的jsp文件內(nèi)容改了,刪除了所有的struts2標簽,只輸出一行文本,測試結(jié)果如下圖:

    天啊,性能超出我的想像,性能太好了,達到了我的要求。看來一定是struts2標簽拖了后腿。

    ?

    ?

    測試12:Struts2 ? 官方提供的 示例程序 (使用Struts2標簽--s:form) ? 426個請求/秒
    為了讓現(xiàn)象復(fù)現(xiàn),我把 “測試10”中 jsp又改了,jsp中換用了其它的struts2標簽 ,測試結(jié)果如下圖:

    使用的標簽是:

    Xml代碼 ?
  • <s:form?action="Login">???
  • ????<s:textfield?key="username"/>???
  • ????<s:password?key="password"?/>???
  • ????<s:submit/>???
  • </s:form>??
  • ?

    ?

    ?

    ?

    =====================================================

    結(jié)論:

    struts2框架性能很好, 但struts2的標簽性能太差了。 要避免使用 struts2標簽。
    Struts2 由于采用了 值棧、OGNL表達式、struts2標簽庫等,會導致性能下降,很嚴重的下降。如果避免或減少使用這些,性能還是很好的。
    Struts2的
    多層攔截器、 多實例action性能都很好,并不是 導致性能問題的原因。

    注:以上測試都沒有數(shù)據(jù)庫,也沒有復(fù)雜業(yè)務(wù),action和jsp中內(nèi)容很簡單,目的就是測試MVC部分的性能。

    ---------------------------------------------------------------------------------------
    其它測試文章:
    http://zhaoshg.iteye.com/blog/356231
    http://www.iteye.com/topic/679543

    MVC框架性能比較
    http://wenku.baidu.com/view/148d7e34eefdc8d376ee32ac.html

    spring3mvc與struts2比較
    http://www.iteye.com/topic/646240

    ---------------------------------------------------------------------------------------

    ?

    附:幾種標簽和框架組合解析數(shù)據(jù)時候的 性能測試對比

    一、 數(shù)據(jù)
    數(shù)據(jù)通過查詢?nèi)罩颈淼玫綌?shù)據(jù),共 1302 條數(shù)據(jù),將查詢出的數(shù)據(jù)放入一個靜態(tài) List 中,保證每次請求的數(shù)據(jù)相同。

    測試頁面的元素相同,只是在取數(shù)據(jù)方式上不同。


    二、 測試目標

    1、 在 JSP 頁面使用 struts2 標簽的性能;

    2、 在 JSP 頁面使用 JSTL 標簽的性能;

    3、 在 Freemarker 頁面使用 struts2 標簽的性能;

    4、 在 Freemarker 頁面使用 JSTL 標簽的性能;

    5、 在 Freemarker 頁面使用其本身的數(shù)據(jù)加載方式的性能。


    三、 加載耗時對比

    時間: ms?????????? 注:每一次對比都是在同一時間段按同一順序依次執(zhí)行下列幾種方式

    ?

    ?

    ?

    ?

    struts2

    JSTL C

    Freemarker-struts2

    Freemarker-C

    Freemarker

    第一次

    306

    58

    1618

    ?

    41

    第二次

    202

    52

    1643

    ?

    39

    第三次

    211

    58

    2047

    ?

    36

    第四次

    196

    49

    1621

    ?

    28

    第五次

    218

    52

    1607

    ?

    40

    第六次

    303

    331

    1857

    ?

    45

    第七次

    210

    50

    1671

    ?

    33

    第八次

    311

    51

    1699

    ?

    47

    第九次

    462

    55

    2180

    ?

    37

    第十次

    218

    46

    1721

    ?

    42

    平均值

    263.7

    80.2

    1766.4

    ?

    38.8

    去掉最高和最低

    223.75

    53.125

    1547.125

    ?

    39.125

    ?

    ?

    ?轉(zhuǎn)賬于
    http://elf8848.iteye.com

    ?

    轉(zhuǎn)載于:https://my.oschina.net/longload/blog/710526

    總結(jié)

    以上是生活随笔為你收集整理的Struts2、SpringMVC、Servlet(Jsp)性能对比 测试 。 Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。