一、準(zhǔn)備工作。
1、安裝JDK1.6或1.6版本以后的,并配置環(huán)境變量。
2、在Apache的官網(wǎng)下載最新的Jmeter,http://jmeter./download_jmeter.cgi,截止目前為止,最新的Jmeter是2.12版本,需要注意的是下載使用的時候不能下載source版本的,必須下載內(nèi)容更加完整的binaray版本的,比如如果下載apache-jmeter-2.12_src.zip,運(yùn)行jmeter.bat時,會出現(xiàn)下面的exception:
unable to access jarfile apachejmeter.jar error value=1
這個exception的原因是apache-jmeter-2.12_src.zip中的bin目錄中,缺少了ApacheJemeter.jar.所以要下載binary版本的。
3、在Apache的官網(wǎng)上下載Tomcat,本文中以Tomcat7.0.42為例。
二、開發(fā)一個簡單的J2EE工程,可以是基于Servlet的,可以是基于Spring等MVC框架的,而且不需要實(shí)現(xiàn)什么樣的功能,只需要滿足用戶訪問http://localhost:9999時,瀏覽器中能夠輸出(index.html)Hello World或者其它任何內(nèi)容。
三、開始在Jmeter中配置模擬對Tomcat的index.html(localhost:9999)進(jìn)行并發(fā)訪問。
首先是使用Tomcat 7.0.42的默認(rèn)配置
1、選中Test Plan,點(diǎn)擊Edit菜單按鈕,選擇Add操作,選擇Thread(Users),然后選擇Thread Group創(chuàng)建一個線程組。
2、選中Thread Group,點(diǎn)擊Edit菜單按鈕,選擇Add操作,選擇Sampler,并選擇Http Request。
3、選中Test Group,點(diǎn)擊Edit菜單安丘,選擇Add操作,選擇Listener,然后分別添加Aggregate Graph(聚集圖形),View Results Tree(查看結(jié)果樹)。
3、不修改Tomcat的默認(rèn)配置,啟動Tomcat,由于默認(rèn)的Tomcat運(yùn)行在8080端口,將上面的9999端口先改回8080或者遵照后面點(diǎn)的步驟將Tomcat默認(rèn)的8080端口改為9999。
4、啟動Tomcat。
5、點(diǎn)擊上面的綠色執(zhí)行按鈕執(zhí)行該測試計劃。
由測試線程組可知,Jemeter將模擬150000個線程請求不斷的訪問localhost:8080。執(zhí)行10分鐘后,運(yùn)行結(jié)果截圖可得:
下面將詳解這個聚合報告中的每個參數(shù):
1)Label:每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,label顯示的就是 Name 屬性的值
2)#Samples:表示你這次測試中一共發(fā)出了多少個請求,如果模擬10個用戶,每個用戶迭代10次,那么這里顯示100,這里顯示的應(yīng)該是150000而不是172649,之所以是172649,是因?yàn)槲抑虚g點(diǎn)擊停止,然后又再原來的基礎(chǔ)上重新開始執(zhí)行。
3)Average:平均響應(yīng)時間——默認(rèn)情況下是單個 Request 的平均響應(yīng)時間,當(dāng)使用了 Transaction Controller 時,也可以以Transaction 為單位顯示平均響應(yīng)時間
4)Median:中位數(shù),也就是 50% 用戶的響應(yīng)時間
5)90% Line:90% 用戶的響應(yīng)時間
6)Min:最小響應(yīng)時間
7)Max:最大響應(yīng)時間
8)Error%:本次測試中出現(xiàn)錯誤的請求的數(shù)量/請求的總數(shù)
9)Throughput:吞吐量——默認(rèn)情況下表示每秒完成的請求數(shù)(Request per Second),當(dāng)使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的 Transaction per Second 數(shù)
10)KB/Sec:每秒從服務(wù)器端接收到的數(shù)據(jù)量,相當(dāng)于LoadRunner中的Throughput/Sec 這里我們可以看到,在這172649多次的訪問之中,tomcat的訪問出錯率是0.15%,即大概有100多次的請求是由于忙碌而失敗了的。當(dāng)然,這只是一個參考,具體還要根據(jù)軟硬件的條件才能最終確定下來。
對Tomcat進(jìn)行調(diào)優(yōu)后再用Jmeter進(jìn)行測試
1、增加Tomcat對JVM內(nèi)存的分配:即調(diào)整虛擬內(nèi)存
Linux: 在/usr/local/tomcat_home/bin目錄下的catalina.sh 添加:JAVA_OPTS='-Xms1024m -Xmx2048m' 要加“m”說明是MB,否則就是KB了,在啟動tomcat時會報內(nèi)存不足。 -Xms:初始值 -Xmx:最大值 -Xmn:最小值
Windows:
在catalina.bat最前面加入 set JAVA_OPTS=-Xms1024m -Xmx2048m 如果用startup.bat啟動tomcat,OK設(shè)置生效。夠成功的分配2048M內(nèi)存. 但是如果不是執(zhí)行startup.bat啟動tomcat而是利用windows的系統(tǒng)服務(wù)啟動tomcat服務(wù),上面的設(shè)置就不生效了,就是說set JAVA_OPTS=-Xms1024m -Xmx2048m沒起作用。 windows服務(wù)執(zhí)行的是bin\tomcat.exe.他讀取注冊表中的值,而不是catalina.bat的設(shè)置.。 解決辦法: 修改注冊表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat7\Parameters\JavaOptions 原值為 -Dcatalina.home="C:\ApacheGroup\Tomcat 7.0.42" -Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 7.0.42\common\endorsed" -Xrs 加入 -Xms1024m -Xmx2048m 重起tomcat服務(wù),設(shè)置生效
2、修改線程池并將默認(rèn)的8080端口修改為9999端口。
即將默認(rèn)的
- <Connector port="8080" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
修改為:
- <Connector port="9999" redirectPort="8443"
- maxHttpHeaderSize="8192" useBodyEncodingForURI="true"
- minProcessors="100" maxProcessors="5000"
- maxThreads="5000" minSpareThreads="1000" maxSpareThreads="4000"
- enableLookups="false" acceptCount="3500"
- compression="on" compressionMinSize="2048"
- compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
- connectionTimeout="60000" disableUploadTimeout="true" debug="0" URIEncoding="UTF-8"/>
3. 禁用DNS查詢
當(dāng)web應(yīng)用程序向要記錄客戶端的信息時,它也會記錄客戶端的IP地址或者通過域名服務(wù)器查找機(jī)器名轉(zhuǎn)換為IP地址。DNS查詢需要占用網(wǎng)絡(luò),并且包括可能從很多很遠(yuǎn)的服務(wù)器或者不起作用的服務(wù)器上去獲取對應(yīng)的IP的過程,這樣會消耗一定的時間。為了消除DNS查詢對性能的影響我們可以關(guān)閉 DNS查詢,方式是修改server.xml文件中的enableLookups參數(shù)值: 將其設(shè)置為false。
4、修改完后,重啟tomcat。
5、在Jmeter的Thread Group中將上面的8080改成9999.
6、重新執(zhí)行Jmeter,執(zhí)行10分鐘后,保存執(zhí)行結(jié)果,得到如下的執(zhí)行結(jié)果:
對比調(diào)優(yōu)后的執(zhí)行結(jié)果,發(fā)現(xiàn)Tomcat的吞吐率得到了相當(dāng)?shù)奶嵘?,平均?zhí)行時間大大減少了。
|