Jmeter远程测试
11.3 詳解JMeter遠程測試(1)
2012-04-09 09:14 溫素劍 電子工業(yè)出版社 字號:T | T綜合評級:
想讀(7)??在讀(2)??已讀(0)?? 品書齋鑒(0)?? 已有9人發(fā)表書評
《零成本實現(xiàn)Web性能測試:基于Apache JMeter》第11章JMeter進階知識,本章內(nèi)容比較寬泛,總結(jié)起來都是一些JMeter高階知識。其中"詳解JMeter函數(shù)和變量"一節(jié),請重 點關(guān)注各種JMeter內(nèi)置函數(shù);"詳解JMeter正則表達式"一節(jié),對入門讀者很重要;"詳解JMeter遠程測試"一節(jié)在實際工作中會經(jīng)常用到,非 常重要;"詳解JMeter最佳實踐經(jīng)驗"和"一些小技巧"都是一些實踐經(jīng)驗,供讀者借鑒。本節(jié)為大家介紹JMeter遠程測試。
AD:51CTO網(wǎng)+ 首屆中國APP創(chuàng)新評選大賽火熱招募中……
11.3? 詳解JMeter遠程測試(1)
如果運行JMeter客戶端的機器性能不能滿足測試需要,那么測試人員可以通過單個JMeter GUI客戶端來控制多個遠程JMeter服務(wù)器,以便對服務(wù)器進行壓力測試,模擬足夠多的并發(fā)用戶。通過遠程運行JMeter,測試人員可以跨越多臺低端 計算機復制測試,這樣就可以模擬一個比較大的服務(wù)器壓力。一個JMeter GUI客戶端實例,理論上可以控制任意多的遠程JMeter實例,并通過它們收集測試數(shù)據(jù),如圖11-3所示。這樣一來,就有了如下特性:
保存測試采樣數(shù)據(jù)到本地機器。
通過單臺機器管理多個JMeter執(zhí)行引擎。
沒有必要將測試計劃復制到每一臺機器,JMeter GUI客戶端會將它發(fā)往每一臺JMeter服務(wù)器。
每一臺JMeter遠程服務(wù)器都執(zhí)行相同的測試計劃。JMeter不會在執(zhí)行機間做負載均衡,每一臺服務(wù)器都會完整地運行測試計劃。
在1.4GHz~3GHz的CPU、1GB內(nèi)存的JMeter客戶端上,可以處理線程100~300。但是Web Service例外。XML處理是CPU運算密集的,會迅速消耗掉所有的CPU。一般來說,以XML技術(shù)為核心的應(yīng)用系統(tǒng),其性能將是普通Web應(yīng)用的 10%~25%。另外,如果所有負載由一臺機器產(chǎn)生,網(wǎng)卡和交換機端口都可能產(chǎn)生瓶頸,所以一個JMeter客戶端線程數(shù)不應(yīng)超過100。
采用JMeter遠程模式并不會比獨立運行相同數(shù)目的非GUI測試更耗費資源。但是,如果使用大量的JMeter遠程服務(wù)器,可能會導致客戶端過載,或者網(wǎng)絡(luò)連接發(fā)生擁塞。
請注意,假如測試人員將JMeter執(zhí)行引擎安裝在應(yīng)用服務(wù)器(測試目標)上,那么這顯然會加重應(yīng)用服務(wù)器的負擔,測試結(jié)果也將變得不可信。作者推 薦的方式是將JMeter遠程服務(wù)器放在應(yīng)用服務(wù)器(測試目標)所在的同一個網(wǎng)段內(nèi)。這樣做既可以減少JMeter收集測試結(jié)果對網(wǎng)絡(luò)產(chǎn)生的沖擊,又可以 避免對應(yīng)用服務(wù)器(測試目標)性能產(chǎn)生影響。
| ? |
| 圖11-3 JMeter遠程測試原理圖 |
下面是啟動JMeter遠程測試的基本步驟:
步驟1:配置節(jié)點
確保所有節(jié)點(JMeter客戶端和JMeter遠程服務(wù)器)運行相同版本的JMeter。盡可能在所有操作系統(tǒng)上使用相同的Java版本。
如果測試用到了外部數(shù)據(jù)文件,那么請注意這些文件不會被JMeter客戶端分發(fā),因此測試人員需要確保每臺執(zhí)行機上都保存了這些數(shù)據(jù)文件(其所在目 錄也必須正確)。如果有必要,用戶可以為每臺執(zhí)行機設(shè)置不同的屬性變量,即在JMeter遠程服務(wù)器上編輯user.properties或者 system.properties文件。這些屬性將會在JMeter遠程服務(wù)器啟動時被識別,并有可能被應(yīng)用到測試計劃之中,從而影響測試執(zhí)行(例如, 與其他遠程服務(wù)器發(fā)生交互)。另外,不同的JMeter遠程服務(wù)器可能會使用不同內(nèi)容的數(shù)據(jù)文件(例如,每臺服務(wù)器必須使用不同的ID,就以此來劃分數(shù)據(jù) 文件)。
步驟2:啟動遠程服務(wù)器
要啟動JMeter遠程節(jié)點,請在執(zhí)行機上運行JMETER_HOME/bin/jmeter-server (UNIX)或者JMETER_HOME/bin/jmeter-server.bat(Windows)腳本。
請注意,每個遠程節(jié)點上只能運行一個JMeter遠程服務(wù)器腳本,除非采用不同的RMI端口。從JMeter 2.3.1開始,JMeter遠程服務(wù)器會自己啟動RMI注冊;用戶沒有必要單獨啟動RMI注冊。假設(shè)測試人員一定要單獨啟動RMI注冊,可以在遠程節(jié)點 上定義JMeter屬性server.rmi.create=false。
默認情況下,JMeter遠程服務(wù)器的RMI使用動態(tài)端口號。這樣就會為防火墻配置帶來麻煩,因此JMeter 2.3.2及其以后的版本,會檢查JMeter屬性server.rmi.localport。如果該值非零,JMeter遠程服務(wù)器就會用它來作為本地 端口號。
步驟3:將JMeter遠程服務(wù)器的IP地址添加到客戶端屬性文件中
編輯JMeter控制機的屬性文件。在/bin/jmeter.properties文件中找到屬性"remote_hosts",使用JMeter遠程服務(wù)器的IP地址作為其屬性值。可以添加多個服務(wù)器的IP地址,以逗號作為分隔。
請注意測試人員還可以使用-R命令行選項來指明將會使用的遠程服務(wù)器。這與使用-r 和-Jremote_hosts={服務(wù)器列表}的效果相同。例如jmeter -Rhost1,127.0.0.1,host2。
如果測試人員定義JMeter屬性server.exitaftertest=true,那么遠程服務(wù)器在運行完單個測試后就會退出。-Z標志也有同樣的效果,參見后面的內(nèi)容。
?
11.3? 詳解JMeter遠程測試(2)
步驟4(a):通過GUI客戶端啟動JMeter測試
現(xiàn)在輪到啟動JMeter GUI客戶端了。在MS-Windows環(huán)境下運行"bin/jmeter.bat"腳本,在UNIX環(huán)境下運行"bin/jmeter"腳本。測試人員 會發(fā)現(xiàn)在運行(Run)菜單下,包含兩個子菜單"Remote Start"和"Remote Stop",如圖11-4所示。這兩個子菜單中包含測試人員在屬性文件中設(shè)置的JMeter遠程服務(wù)器IP地址。此刻,請使用遠程啟動和停止來代替普通的 JMeter啟動和停止。
| ? |
| 圖11-4? 運行菜單 |
步驟4(b):通過非GUI客戶端啟動JMeter測試
還有另外一種方法,測試人員可以通過非GUI客戶端來啟動遠程服務(wù)器。命令如下:
或者:
其他標志可能也有用。
-Gproperty=value:在所有JMeter遠程服務(wù)器中定義一個屬性(可以多次出現(xiàn))
-Z:在測試結(jié)束后退出遠程服務(wù)器。
第一個例子會啟動定義在JMeter屬性remote_hosts中的遠程服務(wù)器;而第二個例子會先定義遠程服務(wù)器列表,接著啟動它們。命令行客戶端會在所有服務(wù)器停止后退出。
1.手動配置JMeter遠程測試
在某些情況下,jmeter-server腳本不能正常工作(如果測試人員使用的操作系統(tǒng)不在JMeter開發(fā)者預(yù)期的范圍內(nèi))。下面介紹如何啟動JMeter遠程服務(wù)器(對應(yīng)上面的步驟2),其中包含了更多人工操作。
步驟2(a):啟動RMI注冊
從JMeter 2.3.1開始,JMeter遠程服務(wù)器會自己啟動RMI注冊,因此這里的內(nèi)容不適用于普通情況。如果要采用歷史版本的操作方法,首先在JMeter遠程服務(wù)器上定義JMeter屬性server.rmi.create=false,并遵循如下指南。
JMeter使用Remote Method Invocation(RMI)作為遠程通信機制。因此,測試人員需要用到JDK "bin"目錄中的RMI注冊程序(名為"rRmiregistry")。在運行Rmiregistry之前,請確保如下jar存在于測試人員的系統(tǒng) claspath中:
JMETER_HOME/lib/ext/ApacheJMeter_core.jar。
JMETER_HOME/lib/jorphan.jar。
JMETER_HOME/lib/logkit-1.2.jar。
注冊程序需要訪問特定JMeter類。運行Rmiregistry無須參數(shù)。默認情況下應(yīng)用程序會監(jiān)聽端口1099。
步驟2(b):啟動JMeter遠程服務(wù)器
一旦RMI注冊程序運行起來,就啟動JMeter遠程服務(wù)器。JMeter啟動腳本需攜帶"-s"選項。
步驟3和步驟4同上面的介紹。
2.一些小技巧
JMeter/RMI要求建立一個從客戶端到遠程服務(wù)器的連接。這就會用到測試人員所選擇的端口號,默認值是1099。JMeter/RMI還要求 建立一個反向連接,目的是從遠程服務(wù)器向客戶端返回測試采樣結(jié)果。這就會用到一個更高數(shù)字的端口號。如果在JMeter客戶端與JMeter遠程服務(wù)器之 間存在任何防火墻或者網(wǎng)絡(luò)過濾器,那么測試人員就需要確保它們已經(jīng)被正確配置,并允許相關(guān)連接通信。如果有必要,請使用監(jiān)聽軟件來觀察通信的過程。
如果JMeter運行在Suse Linux上,下面這些技巧對測試人員可能會有幫助。默認的安裝可能會啟動防火墻。在這種情況下,遠程測試將無法正常工作。如果測試人員發(fā)現(xiàn)連接被拒絕 后,可以通過下面的選項打開debugging。從JMeter 2.3.1版本開始,RMI注冊由JMeter遠程服務(wù)器啟動;不過相關(guān)選項依然可以通過JMeter命令行傳遞。例如,"jmeter -s -Dsun.rmi.loader.logLevel=verbose"(省略了-J前綴)。另外這些屬性還可以被定義在 system.properties文件中。
解決的方法是從etc/hosts中刪除對127.0.0.1和127.0.0.2的回送(Loopback)。 當127.0.0.2的回送無效時,jmeter-server將無法連接到Rmiregistry。
替換:
為:
11.3? 詳解JMeter遠程測試(3)
同時創(chuàng)建一個規(guī)則(Qolicy)文件,添加[computer_name][computer_domain]行到/etc/hosts。
3.如何使用不同端口號
默認情況下,JMeter使用標準RMI端口號1099(這是可以改變的)。要想成功改變使用的端口號,需滿足如下條件:
在遠程服務(wù)器,啟動Rmiregistry使用新端口號。
在遠程服務(wù)器,啟動JMeter并預(yù)先定義server_port屬性。
在客戶端,更新remote_hosts屬性,在其中包含remote host:port設(shè)置。
從JMeter 2.1.1版本開始,jmeter-server腳本支持改變端口號。例如,假設(shè)測試人員希望使用端口號1664(可能因為1099端口已經(jīng)被其他應(yīng)用程序占用了)。
Windows系統(tǒng) (DOS窗口中):
UNIX系統(tǒng):
在這兩種情況下,腳本都會在指定端口上啟動Rmiregistry,接著以遠程服務(wù)器模式啟動JMeter,并已經(jīng)定義了"server_port"屬性。
選定的端口號將會被記錄到遠程服務(wù)器的jmeter.log文件中(Rmiregistry不會創(chuàng)建一個日志文件)。
4.使用采樣批次
測試計劃中的監(jiān)聽器會把它們的結(jié)果返回到JMeter客戶端,而JMeter客戶端默認情況下會將這些結(jié)果寫入到指定文件中,采樣結(jié)果會在產(chǎn)生后立即發(fā)回JMeter客戶端。這樣就會對網(wǎng)絡(luò)和JMeter客戶端產(chǎn)生很大的壓力。用戶可以通過設(shè)置一些屬性,來改變默認操作。
模式(Mode)(采樣結(jié)果發(fā)送模式)默認是Standard。
Standard:在采樣結(jié)果產(chǎn)生后立即發(fā)送。
Hold:將采樣結(jié)果保存在一個數(shù)組中,直到測試結(jié)束。這可能會占用遠程服務(wù)器的大量內(nèi)存。
Batch:當計數(shù)器或者時間超過閾值之后,發(fā)送保存的采樣結(jié)果。
Statistical:當計數(shù)器或者時間超過閾值之后,以概要的形式發(fā)送采樣結(jié)果;采樣結(jié)果以線程組(Thread Group)名稱和采樣標簽(Sample Label)進行概要統(tǒng)計。積累的數(shù)據(jù)域包括:elapsed time、latency、bytes、sample count、error count,其他數(shù)據(jù)域?qū)粊G棄。
Stripped:將成功采樣的響應(yīng)數(shù)據(jù)移除。
StrippedBatch:將成功采樣的響應(yīng)數(shù)據(jù)移除,并批次發(fā)送。
Custom implementation:將模式參數(shù)設(shè)置為測試人員的客戶化采樣發(fā)送器的類名。該類必須實現(xiàn)接口SampleSender,并且類的構(gòu)造函數(shù)只有一個RemoteSampleListener型的參數(shù)。
如下屬性會影響B(tài)atch和Statistical模式。
num_sample_threshold:一個批次中的采樣數(shù)目(默認為100)。
time_threshold:等待的毫秒數(shù)(默認為60秒)。
?
3、遠程啟動時,報錯:ERROR - jmeter.gui.action.RemoteStart: Failed to initialise remote engine java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
java.net.ConnectException: Connection refused: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
at sun.rmi.server.UnicastRef.newCall(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Unknown Source)
at org.apache.jmeter.engine.ClientJMeterEngine.getEngine(ClientJMeterEngine.java:54)
at org.apache.jmeter.engine.ClientJMeterEngine.<init>(ClientJMeterEngine.java:67)
at org.apache.jmeter.gui.action.RemoteStart.doRemoteInit(RemoteStart.java:180)
at org.apache.jmeter.gui.action.RemoteStart.doAction(RemoteStart.java:80)
at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:81)
這個問題終于被我解決了,其實原因好簡單呀。只要將本機的server.bat執(zhí)行即可。
注意:要是在配置的地方寫了127.0.0.1 的話 就要開本機的 sever.bat. 不寫的話 就不用開了
?
4、查看1099端口是否被占用
netstat -ano | findstr "1099"
tasklist | findstr "1099"
?
Jmeter-server啟動失敗:Cannot?start.?Unable?to?get?local?host?IP?address.?is?a?loopback?address
(2012-03-30 13:51:42) 轉(zhuǎn)載▼標簽: it | 分類: 性能測試:jmeter |
? 在Windows下啟動Jmeter非常順利,轉(zhuǎn)到Linux下居然啟動失敗。
想起之前 遇到“/etc/hosts文件設(shè)置不對導致Jboss啟動失敗”, 立馬把焦點指向/etc/hosts。
果然還是這個問題,貼/etc/hosts示例:
| 127.0.0.1?????? localhost.localdomain localhost 10.20.10.31?? higkoo.rdev.company.net higkoo |
執(zhí)行命令`hostname`查看當前機器名如果當前機器名與/etc/hosts不一致 ,可手動先執(zhí)行成一次`hostname yourhostname`或直接加到j(luò)meter-server文件中(注意機器名中不要含域信息,譬如:myname.rdev.company.com。這樣設(shè)置仍然啟動失敗)。
由/etc/hosts文件導致啟動失敗的錯誤有:
| 1 | Created?remote?object:?UnicastServerRef?[liveRef:?[endpoint:[10.20.10.31:62090](local),objID:[2c639f6d:12794fca52a:-7fff,?712947915258586677]]] Server?failed?to?start:?java.rmi.RemoteException:?Cannot?start.?higkoo?is?a?loopback?address. |
| 2 | Created?remote?object:?UnicastServerRef?[liveRef:?[endpoint:[10.20.10.31:38796](local),objID:[-b0d822e:12794fee8b1:-7fff,?8314597152635832475]]] Server?failed?to?start:?java.rmi.RemoteException:?Cannot?start.?Unable?to?get?local?host?IP?address. |
轉(zhuǎn)載于:https://www.cnblogs.com/zhengah/p/5239054.html
總結(jié)
以上是生活随笔為你收集整理的Jmeter远程测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Educational Codeforc
- 下一篇: 【iCore3 双核心板_FPGA】例程