javascript
Struts2、SpringMVC、Servlet(Jsp)性能对比 测试 。 Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照...
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中如下
?
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ò)的。
?
測(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),所以添加了:
?
走默認(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)簽,如下:
?
?
測(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)簽是:
?
?
?
?
=====================================================
結(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)題。
- 上一篇: docker 删除_docker 批量删
- 下一篇: SpringMVC视图解析器(转)