上海千途建站百度下載官方下載安裝
在做后端服務器性能測試中,我們會經(jīng)常聽到'分布式'。那你,是否了解分布式呢?今天,我們就來給大家講講,在企業(yè)實戰(zhàn)中,如何使用分布式進行性能測試,實戰(zhàn)過程中,又有哪些地方要特別注意?
?
為什么要使用分布式?
做性能測試時,如果被測系統(tǒng)性能比較好,或者系統(tǒng)項目比較大,那么一般都會要求能支持比較高的并發(fā)用戶數(shù)。而我們做性能測試時,發(fā)起請求的機器,硬件資源是一定的,不可能配置無限大,所以,它能發(fā)起的并發(fā)用戶數(shù)是有限的,而當我們發(fā)起方一臺電腦能發(fā)起的并發(fā)用戶數(shù)小于我們性能測試期望的并發(fā)用戶數(shù)時,我們就會自然而然想到增加發(fā)起方的電腦。增加發(fā)起方電腦數(shù)量,那么,發(fā)起的并發(fā)用戶數(shù)累加,就增大了。
發(fā)起方一臺電腦,不管是windows系統(tǒng)還是linux系統(tǒng),一般而言,大概能支持1.5k左右并發(fā)用戶,更多并發(fā)用戶就要采用分布式。
那么,接下來的問題就是如何配置分布式?
如何配置分布式?
- 助攻機配置,修改jmeter.properties文件 首先,我們準備多臺機器,作為助攻機器; 然后,檢查每臺機器上是否安裝了jdk,并且jdk版本是否都一致; 然后,在助攻機器上放置相同版本的jmeter; 接下來,配置jmeter.properties文件, 修改server_port端口,自定義一個端口 修改server.rmi.ssl.disable=true 修改 server.rmi.port 端口 ---- 可選 啟動服務:jmeter-server -Djava.rmi.server.hostname=ip_address 檢查防火墻,關閉或開放 自定義的server_port端口
- 主控機器配置,修改jmeter.properties文件 修改remote_hosts,值為助攻機器ip 修改,server.rmi.ssl.disable=true 修改, mode=Standard
分布式機器配置有哪些注意事項?
分布式的配置,是不是很簡單呢?
是的,這個配置實際上一點都不難,如果你要自己練手,按照上面的操作,就能很簡單配置成功。但是,當你在企業(yè)項目中實戰(zhàn)時,還會這么簡單嗎?如果你企業(yè)的項目,需要支持大幾萬的并發(fā),要使用幾十臺助攻機器,是不是就簡單重復上面的操作就可以了呢?
答案是否定的。
現(xiàn)在有幾十臺linux機器,放在你面前,供你去配置為助攻機。數(shù)量比較大,完全無法保證每一臺都一模一樣,所以,我們先要檢查機器配置。
- 1、硬件資源 cpu、內(nèi)存是一臺電腦的核心, 幾十臺機器,我們完全無法保證每一臺都一樣,在助攻機的要求中,雖然,沒有對cpu和內(nèi)存做要求,但是,如果每臺機器能提供的資源不一樣,那么能產(chǎn)生的并發(fā)用戶數(shù)量肯定也會不相等,所以,我們需要找出有機器中,最低配置的機器,然后,以最低配置機器為參考配置jmeter的堆棧信息。 通過top命令,查看下每個系統(tǒng)的cpu和內(nèi)存信息 修改jmeter的bin文件夾中jmeter文件HEAP:="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" 修改堆棧信息中的大小。 不配置,在執(zhí)行高并發(fā)用戶數(shù)時,jmeter可能會出現(xiàn)OOM問題
- 2、系統(tǒng)環(huán)境 jdk 機器多了,每臺機器的jdk大版本是否一致,可能就是個問題。如果,機器上沒有安裝,哪可以直接去安裝指定版本即可,但是,如果助攻機器上已經(jīng)安裝了其他版本的jdk,并且正運行其他java項目,這個時候怎么辦呢? 指定jmeter的運行jdk版本 1、下載解壓指定jdk版本到linux的/usr/local 文件夾下, 不要去配置改動系統(tǒng)環(huán)境變量 2、在jmeter的jmeter文件中,添加JAVA_HOME=/usr/local/jdk版本/ 指定jmeter運行的jdk版本,這樣,就不用改動操作系統(tǒng)的jdk,不影響系統(tǒng)中其他java項目 jmeter jmeter版本 所有助攻機器上jmeter的版本都必須一致。 jmeter.properties要修改ssl.disable=true, 端口可以不相同 如果代碼中使用了第三方插件,助攻機器上,也必須有這些插件包 環(huán)境變量 jmeter運行,本身可以不配置JMETER_HOME環(huán)境變量,但是,當機器多了時,還是建議在所有機器上配置JMETER_HOME環(huán)境變量 HEAP配置 機器多了,可能每臺機器的內(nèi)存都不一樣, 我們期望助攻機器能產(chǎn)生更大的并發(fā)用戶數(shù),所以,建議修改每臺機器的HEAP配置信息,設置為相同 csv文件 如果寫的jmeter腳本中,使用了csv數(shù)據(jù)文件設置,那么文件的路徑,請使用相對路徑寫法。 jmeter-server助攻服務在哪個路徑下啟動,就要在所有的機器上,上傳csv文件到該路徑下的相對位置。 os操作系統(tǒng) os版本: 沒有要求,可以是不同版本 端口區(qū)間: 操作系統(tǒng)的端口數(shù)量是有限的,不同系統(tǒng),默認情況下,打開的端口數(shù)量可能不相等,這就需要我們?nèi)ヅ渲靡幌旅颗_機器上打開的端口范圍。 sysctl -a | grep net.ipv4.ip_local_port_range 這個命令可以查看當前機器上,開啟的端口范圍 sysctl -w net.ipv4.ip_local_port_range="1024 65534" 然后再執(zhí)行sysctl -p 生效。 這樣,設置每臺機器上,開啟的端口范圍。 打開文件數(shù)量 操作系統(tǒng)對每個程序能打開的文件數(shù)量是有限制的,這個是系統(tǒng)限制,我們可以通過ulimit -n 看到, 也可以通過cat /proc/進程id/limit 查看某個進程今天能打開的文件數(shù)量限制。 因為性能測試助攻機,也是要發(fā)起大量請求的,這有可能要打開大量的文件,如果文件數(shù)量限制過小,也會導致問題,所以,我們可以通過ulimit -n 數(shù)量 來修改進程可以打開的文件數(shù)量。然后,重啟動jmeter-server助攻服務,這樣,就會以你修改后的數(shù)量來做限制了。 時間 助攻機器多了,可能出現(xiàn)每臺機器的時間不一樣,我們可以通過date 查看每臺機器的時間。 性能測試,期望是在同一時間能發(fā)起大量請求,如果,多臺機器時間不一致,那么在同一時間,發(fā)起的請求數(shù)量可能就達不到預期要求,所以,我們需要同步設定每臺機器的時間。date -s 時間 來設定系統(tǒng)時間。
- 3、網(wǎng)絡環(huán)境 幾十臺機器,網(wǎng)絡配置可能會不一樣,如果這些助攻機器到被測服務器之間的網(wǎng)絡存在問題,那么,可能就會導致請求壓力上不會,甚至出現(xiàn)網(wǎng)絡錯誤。 我們可以在每臺助攻機器上,使用tracepath 被測服務器 來查看助攻機到被測服務器之間的網(wǎng)絡情況。如果發(fā)現(xiàn),網(wǎng)絡延遲時間很長,哪就說明,當前機器,可能網(wǎng)絡配置有問題。在使用時,可能就要剔除這臺助攻機器。
- 4、啟動服務 在每臺助攻機器上執(zhí)行:jmeter-server -Djava.rmi.server.hostname=ipaddr 因為每臺的ip地址都不一樣,所以,這個命令必須一個一個的敲。 同時,我們可以加個’&‘ 符號,把命令轉(zhuǎn)換為后臺運行。 在主控機器上執(zhí)行:java -Xms48g -Xmx48g -XX:MaxMetaspaceSize=2g -jar $JMETER_HOME/bin/ApacheJMeter.jar -n -R xxx:port,xxx:port -t xxx.jmx -l xxxx.jtl -e -o xxdirect -Xms48g -Xmx48g -XX:MaxMetaspaceSize=2g 這個是設置主控機器jmeter的堆棧信息,這個大小,可以根據(jù)自己機器的內(nèi)存大小靈活修改,但是,這個一定要設置的比較大。如果小了,生成報告的時間就會很長。 $JMETER_HOME/bin/ApacheJMeter.jar 為自己的jmeter路徑 -R xxx:port,xxx:port 指定助攻機器??梢愿鶕?jù)自己的需要指定。如果,不需要采用分布式,就不用這一段,如果要用分布式,就要使用這一段,多臺時,就用逗號分隔。 -t xxx.jmx 你放在主控機器上的jmeter腳本文件
好了,這些注意事項,你都學會了嗎?
?