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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

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

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

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

Struts2、SpringMVC、Servlet(Jsp)性能對(duì)比 測(cè)試

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

做為一個(gè)程序員,對(duì)于各個(gè)框架的性能要有一個(gè)基本的認(rèn)知,便于選型時(shí)做出正確的決策。

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

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

?

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

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

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


---------------------------------------------------------------------------------------
Tomcat6.0 配置文件的說(shuō)明 ,做測(cè)試之前是要整清楚的。
默認(rèn)的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查詢(xún),當(dāng)web應(yīng)用程序要通過(guò)域名服務(wù)器查找機(jī)器名轉(zhuǎn)換為IP地址時(shí)。會(huì)使用DNS查詢(xún),需要占用網(wǎng)絡(luò),延長(zhǎng)較長(zhǎng)
    maxThreads
    Tomcat可創(chuàng)建的最大的線(xiàn)程數(shù),每一個(gè)請(qǐng)求須要一個(gè)線(xiàn)程來(lái)處理,原來(lái)的150太小了,我們測(cè)試時(shí)并發(fā)會(huì)超過(guò)他的。
    acceptCount
    指定當(dāng)所有可以使用的處理請(qǐng)求的線(xiàn)程數(shù)都被使用時(shí),可以放到處理隊(duì)列中的請(qǐng)求數(shù),就是被排隊(duì)的請(qǐng)求數(shù),超過(guò)這個(gè)數(shù)的請(qǐng)求將拒絕連接。
    connnectionTimeout
    網(wǎng)絡(luò)連接超時(shí),單位:毫秒。設(shè)置為0表示永不超時(shí),這樣設(shè)置有隱患的。通常可設(shè)置為20000毫秒。
    minSpareThreads
    Tomcat初始化時(shí)創(chuàng)建的線(xiàn)程數(shù)
    maxSpareThreads
    一旦創(chuàng)建的線(xiàn)程中空閑線(xiàn)程超過(guò)這個(gè)值,Tomcat就會(huì)關(guān)閉不再需要的socket線(xiàn)程。

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

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

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



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



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



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



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



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

    JSTL標(biāo)簽內(nèi)容是如下,看來(lái)JSTL標(biāo)簽性能還是不錯(cuò)的。

    Java代碼 ?
  • <c:if?test="${empty?list}">???
  • <tr>???
  • <td?align="center">無(wú)記錄!</td>???
  • </tr>???
  • </c:if>???
  • <c:if?test="${not?empty?list}">???
  • <tr>???
  • <th>從?1?開(kāi)始的迭代計(jì)數(shù)</th>???
  • <th>從?0?開(kāi)始的迭代計(jì)數(shù)</th>???
  • <th>產(chǎn)品名稱(chēng)</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>???
  • ?
    測(cè)試7: 訪(fǎng)問(wèn)一張圖片(srping方式一) ? 1997個(gè)請(qǐng)求/秒
    100并發(fā),循環(huán)100次,共10000個(gè)請(qǐng)求. 因?yàn)槲沂褂昧藄pring3 MVC,攔截/,所以圖片不能訪(fǎng)問(wèn),所以添加了:

    Xml代碼 ?
  • <servlet-mapping>????????
  • ????<servlet-name>default</servlet-name>????????
  • ????<url-pattern>*.jpg</url-pattern>????????
  • </servlet-mapping>???
  • ?
    走默認(rèn)的servlet,來(lái)訪(fǎng)問(wèn)2.5K的圖片



    測(cè)試8: 訪(fǎng)問(wèn)一張圖片 (srping方式二) ?? 1967個(gè)請(qǐng)求/秒
    100并發(fā),循環(huán)100次,共10000個(gè)請(qǐng)求,因?yàn)槲沂褂昧藄pring3 MVC,攔截/,所以圖片不能訪(fǎng)問(wèn),所以添加了:
    <mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"/>
    來(lái)訪(fǎng)問(wèn)2.5K的圖片,會(huì)走spring的可匹配的一個(gè)攔截器。

    ?

    ?


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



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

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

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

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

    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>??
  • ?

    ?

    測(cè)試11:Struts2 ? 官方提供的 示例程序 (不使用Struts2標(biāo)簽) ? 1976個(gè)請(qǐng)求/秒--優(yōu)秀啊

    ?

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

    天啊,性能超出我的想像,性能太好了,達(dá)到了我的要求。看來(lái)一定是struts2標(biāo)簽拖了后腿。

    ?

    ?

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

    使用的標(biāo)簽是:

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

    ?

    ?

    ?

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

    結(jié)論:

    struts2框架性能很好, 但struts2的標(biāo)簽性能太差了。 要避免使用 struts2標(biāo)簽。
    Struts2 由于采用了 值棧、OGNL表達(dá)式、struts2標(biāo)簽庫(kù)等,會(huì)導(dǎo)致性能下降,很?chē)?yán)重的下降。如果避免或減少使用這些,性能還是很好的。
    Struts2的
    多層攔截器、 多實(shí)例action性能都很好,并不是 導(dǎo)致性能問(wèn)題的原因。

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

    ---------------------------------------------------------------------------------------
    其它測(cè)試文章:
    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

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

    ?

    附:幾種標(biāo)簽和框架組合解析數(shù)據(jù)時(shí)候的 性能測(cè)試對(duì)比

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

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


    二、 測(cè)試目標(biāo)

    1、 在 JSP 頁(yè)面使用 struts2 標(biāo)簽的性能;

    2、 在 JSP 頁(yè)面使用 JSTL 標(biāo)簽的性能;

    3、 在 Freemarker 頁(yè)面使用 struts2 標(biāo)簽的性能;

    4、 在 Freemarker 頁(yè)面使用 JSTL 標(biāo)簽的性能;

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


    三、 加載耗時(shí)對(duì)比

    時(shí)間: ms?????????? 注:每一次對(duì)比都是在同一時(shí)間段按同一順序依次執(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的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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