国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JMeter界面詳介及如何進(jìn)行壓測(cè)

這篇具有很好參考價(jià)值的文章主要介紹了JMeter界面詳介及如何進(jìn)行壓測(cè)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、下載安裝及使用

二、性能測(cè)試常用指數(shù)簡(jiǎn)介

1、TPS,每秒事務(wù)數(shù)

2、系統(tǒng)吞吐量 QPS(TPS)

3、TRT,事務(wù)響應(yīng)時(shí)間

4、PerfMon Metrics Collector

三、JMeter的重要參數(shù)簡(jiǎn)介

1、JMeter客戶端實(shí)現(xiàn)方式簡(jiǎn)介

2、Keep-Alive模式

3、自動(dòng)重定向與跟隨重定向

四、JMeter工具常用界面設(shè)置

1、線程組

2、添加HTTP請(qǐng)求?編輯

3、聚合報(bào)告簡(jiǎn)介

五、JMeter壓力測(cè)試時(shí)遇到的常見(jiàn)問(wèn)題

1、Response Times Over Time中的峰值和聚合報(bào)告中的最大值為何不一致?

2、Response Times Over Time圖中有多少個(gè)點(diǎn),和請(qǐng)求數(shù)有什么關(guān)系?

3、壓測(cè)接口時(shí),并發(fā)一段時(shí)間后,會(huì)報(bào)java.net.BindException: Address already in use: connect

4、internal server error是什么意思?

5、Internal server error 500 問(wèn)題解決思路

(1)明確錯(cuò)誤含義

(2)檢查HAProxy

(3)檢查Jetty

(4)檢查應(yīng)用

(5)使用tcpdump抓包

6、JMeter問(wèn)題總結(jié)

六、Linux查看程序運(yùn)行情況

1、Top

2、查看CPU使用率

3、查看內(nèi)存占用情況

4、Linux如何統(tǒng)計(jì)進(jìn)程的CPU利用率

5、CPU使用率與CPU空閑時(shí)間的關(guān)系?


一、下載安裝及使用

下載地址:jmeter-plugins.org

安裝:下載后文件為plugins-manager.jar格式,將其放入jmeter安裝目錄下的lib/ext目錄,然后重啟jmeter,即可。

啟動(dòng)jemter,點(diǎn)擊選項(xiàng),最下面的一欄,如下圖所示:

JMeter界面詳介及如何進(jìn)行壓測(cè)

打開(kāi)后界面如下:JMeter界面詳介及如何進(jìn)行壓測(cè)

Installed Plugins(已安裝的插件):即插件jar包中已經(jīng)包含的插件,可以通過(guò)選中勾選框,來(lái)使用這些插件;

Available Plugins(可下載的插件):即該插件擴(kuò)展的一些插件,可以通過(guò)選中勾選框,來(lái)下載你所需要的插件;

Upgrades(可更新的插件):即可以更新到最新版本的一些插件,一般顯示為加粗斜體,可以通過(guò)點(diǎn)擊截圖右下角的Apply Changes and Restart Jmeter按鈕來(lái)下載更新;

PS:一般不建議進(jìn)行更新操作,因?yàn)樽钚碌牟寮加幸恍┘嫒輪?wèn)題,而且很可能導(dǎo)致jmeter無(wú)法使用(經(jīng)常報(bào)加載類(lèi)異常)?。?!

建議使用jmeter最新的3.2版本來(lái)嘗試更新這些插件。

二、性能測(cè)試常用指數(shù)簡(jiǎn)介

1、TPS,每秒事務(wù)數(shù)

Transactions per Second

即TPS:每秒事務(wù)數(shù),性能測(cè)試中,最重要的2個(gè)指標(biāo)之一。該插件的作用是在測(cè)試腳本執(zhí)行過(guò)程中,監(jiān)控查看服務(wù)器的TPS表現(xiàn)————比如整體趨勢(shì)、實(shí)時(shí)平均值走向、穩(wěn)定性等。

jmeter本身的安裝包中,監(jiān)視器雖然提供了比如聚合報(bào)告這種元件,也能提供一些實(shí)時(shí)的數(shù)據(jù),但相比于要求更高的性能測(cè)試需求,就稍顯乏力。

某次壓力測(cè)試TPS變化展示圖:
JMeter界面詳介及如何進(jìn)行壓測(cè)

2、系統(tǒng)吞吐量 QPS(TPS)

系統(tǒng)吞吐量 = 每秒處理的事務(wù)數(shù)

QPS(TPS)= 并發(fā)數(shù)/平均響應(yīng)時(shí)間

一個(gè)系統(tǒng)吞吐量通常由QPS(TPS)、并發(fā)數(shù)兩個(gè)因素決定,每套系統(tǒng)這兩個(gè)值都有一個(gè)相對(duì)極限值,在應(yīng)用場(chǎng)景訪問(wèn)壓力下,只要某一項(xiàng)達(dá)到系統(tǒng)最高值,系統(tǒng)的吞吐量就上不去了,如果壓力繼續(xù)增大,系統(tǒng)的吞吐量反而會(huì)下降,原因是系統(tǒng)超負(fù)荷工作,上下文切換、內(nèi)存等等其它消耗導(dǎo)致系統(tǒng)性能下降。

3、TRT,事務(wù)響應(yīng)時(shí)間

Response Times Over Time

即TRT:事務(wù)響應(yīng)時(shí)間,性能測(cè)試中,最重要的兩個(gè)指標(biāo)的另外一個(gè)。該插件的主要作用是在測(cè)試腳本執(zhí)行過(guò)程中,監(jiān)控查看響應(yīng)時(shí)間的實(shí)時(shí)平均值、整體響應(yīng)時(shí)間走向等。

使用方法如上,下載安裝配置好插件之后,重啟jmeter,添加該監(jiān)視器,即可實(shí)時(shí)看到實(shí)時(shí)的TRT數(shù)值及整體表現(xiàn)。

某次壓力測(cè)試TRT變化展示圖:
JMeter界面詳介及如何進(jìn)行壓測(cè)

4、PerfMon Metrics Collector

即服務(wù)器性能監(jiān)控?cái)?shù)據(jù)采集器。在性能測(cè)試過(guò)程中,除了監(jiān)控TPS和TRT,還需要監(jiān)控服務(wù)器的資源使用情況,比如CPU、memory、I/O等。該插件可以在性能測(cè)試中實(shí)時(shí)監(jiān)控服務(wù)器的各項(xiàng)資源使用。

下載地址:http://jmeter-plugins.org/downloads/all/或鏈接:http://pan.baidu.com/s/1skZS0Zb 密碼:isu5

下載界面如下:

JMeter界面詳介及如何進(jìn)行壓測(cè)

其中JMeterPlugins-Standard和JMeterPlugins-Extras是客戶端的插件,ServerAgent是服務(wù)端的插件。

下載成功后,復(fù)制JmeterPlugins-Extras.jar和JmeterPlugins-Standard.jar兩個(gè)文件,放到j(luò)meter安裝文件中的lib/ext中,重啟jmeter,即可看到該監(jiān)視器插件。

將ServerAgent-2.2.1.jar上傳到被測(cè)服務(wù)器,解壓,進(jìn)入目錄,Windows環(huán)境,雙擊ServerAgent.bat啟動(dòng);linux環(huán)境執(zhí)ServerAgent.sh啟動(dòng),默認(rèn)使用4444端口。

如出現(xiàn)如下圖所示情況,即表明服務(wù)端配置成功:JMeter界面詳介及如何進(jìn)行壓測(cè)

(1)服務(wù)端啟動(dòng)校驗(yàn)

CMD進(jìn)入命令框,觀察是否有接收到消息,如果有,即表明ServerAgent成功啟動(dòng)。

(2)客戶端監(jiān)聽(tīng)測(cè)試

給測(cè)試腳本中添加jp@gc - PerfMon Metrics Collector監(jiān)聽(tīng)器,然后添加需要監(jiān)控的服務(wù)器資源選項(xiàng),啟動(dòng)腳本,即可在該監(jiān)聽(tīng)器界面看到資源使用的曲線變化。如下圖所示:
JMeter界面詳介及如何進(jìn)行壓測(cè)

在腳本啟動(dòng)后,即可從界面看到服務(wù)器資源使用的曲線變化,Chart表示主界面顯示,Rows表示小界面以及不同資源曲線所代表的顏色,Settings表示設(shè)置,可選擇自己需要的配置。

PS:注意測(cè)試腳本需要持續(xù)運(yùn)行一段時(shí)間,才可以看到具體的曲線變化,否則ServerAgent端會(huì)斷開(kāi)連接!

三、JMeter的重要參數(shù)簡(jiǎn)介

1、JMeter客戶端實(shí)現(xiàn)方式簡(jiǎn)介

1、Java:選擇壓測(cè)時(shí),鏈接是復(fù)用的(代碼中的http調(diào)用都加了連接池)

2、httpclient4:壓測(cè)時(shí),每請(qǐng)求一次都創(chuàng)建一個(gè)新的鏈接,(jmeter5.0以前默認(rèn)關(guān)閉了連接復(fù)用,5.0上是打開(kāi)的:即每請(qǐng)求一次都會(huì)創(chuàng)建一個(gè)新的鏈接)。

從JMeter 5.0開(kāi)始,當(dāng)使用默認(rèn)的HC4實(shí)現(xiàn)時(shí),JMeter將在每個(gè)線程組迭代時(shí)重置HTTP狀態(tài)(SSL狀態(tài)+連接)。如果您不想要此行為,請(qǐng)?jiān)O(shè)置httpclient.reset_state_on_thread_group_iteration = false

?所以httpclient4 在連接復(fù)用設(shè)置打開(kāi)的情況下,壓測(cè)結(jié)果與java的是不一樣的,因?yàn)閖ava復(fù)用鏈接,httpclient4每次連接都會(huì)重新建立tcp連接,如果httpclient4吞吐量過(guò)低,需要考慮網(wǎng)絡(luò)帶寬的限制

java實(shí)現(xiàn)適合壓榨性測(cè)試,httpclient4適合真實(shí)場(chǎng)景的模擬,

連接池的作用于原理:

正常訪問(wèn)數(shù)據(jù)庫(kù)的過(guò)程中,每次訪問(wèn)都需要?jiǎng)?chuàng)建新的連接,這會(huì)消耗大量的資源;連接池的就是為數(shù)據(jù)庫(kù)連接建立一個(gè)“緩沖區(qū)”,預(yù)先在緩沖池中放入一定數(shù)量的連接對(duì)象,當(dāng)需要建立數(shù)據(jù)庫(kù)連接時(shí),只需從“緩沖池”中取出一個(gè),使用完畢之后再放回去;且連接池允許多個(gè)客戶端使用緩存起來(lái)的連接對(duì)象,這些對(duì)象可以連接數(shù)據(jù)庫(kù),它們是共享的、可被重復(fù)使用的;使用連接池可以節(jié)省大量資源,提高程序運(yùn)行速度。

連接池的基本原理是:

先初始化一定的數(shù)據(jù)庫(kù)連接對(duì)象,并且把這些連接保存在連接池中。這些數(shù)據(jù)庫(kù)連接的數(shù)量是由最小數(shù)據(jù)庫(kù)連接數(shù)來(lái)設(shè)定的。連接池的最大數(shù)據(jù)庫(kù)連接數(shù)量限定了這個(gè)連接池能占有的最大連接數(shù),當(dāng)應(yīng)用程序向連接池請(qǐng)求的連接數(shù)超過(guò)最大連接數(shù)量時(shí),這些請(qǐng)求將被加入到等待隊(duì)列中。當(dāng)程序需要訪問(wèn)數(shù)據(jù)庫(kù)的時(shí)候,如果連接池中有空閑的連接,可直接得到一個(gè)連接;如果連接池對(duì)象中沒(méi)有空閑的連接,且連接數(shù)沒(méi)有達(dá)到最大,會(huì)創(chuàng)建一個(gè)新的連接從連接池中取出一個(gè)連接,數(shù)據(jù)庫(kù)操作結(jié)束后,再把這個(gè)用完的連接重新放回連接池。

2、Keep-Alive模式

我們知道Http協(xié)議采用“請(qǐng)求-應(yīng)答”模式,當(dāng)使用普通模式,即非Keep-Alive模式時(shí),每個(gè)請(qǐng)求/應(yīng)答,客戶端和服務(wù)器都要新建一個(gè)連接,完成之后立即斷開(kāi)連接;當(dāng)使用Keep-Alive模式時(shí),Keep-Alive功能使客戶端到服務(wù)器端的連接持續(xù)有效,當(dāng)出現(xiàn)對(duì)服務(wù)器的后繼請(qǐng)求時(shí),Keep-Alive功能避免了建立或者重新建立連接。

http1.0中默認(rèn)是關(guān)閉的,需要在http頭加入”Connection: Keep-Alive”,才能啟用Keep-Alive;
http 1.1中默認(rèn)啟用Keep-Alive,如果加入”Connection: close “才關(guān)閉。目前大部分瀏覽器都是用http1.1協(xié)議,也就是說(shuō)默認(rèn)都會(huì)發(fā)起Keep-Alive的連接請(qǐng)求了,所以是否能完成一個(gè)完整的Keep- Alive連接就看服務(wù)器設(shè)置情況。

開(kāi)啟Keep-Alive的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):Keep-Alive模式更加高效,因?yàn)楸苊饬诉B接建立和釋放的開(kāi)銷(xiāo)。
缺點(diǎn):長(zhǎng)時(shí)間的Tcp連接容易導(dǎo)致系統(tǒng)資源無(wú)效占用,浪費(fèi)系統(tǒng)資源。

3、自動(dòng)重定向與跟隨重定向

Redirect Automatically(自動(dòng)重定向):只針對(duì)Get和Head請(qǐng)求,勾選此項(xiàng)則“跟隨重定向”失效;自動(dòng)重定向可以自動(dòng)轉(zhuǎn)向到最終目標(biāo)頁(yè)面,但是Jmeter是不記錄重定向的過(guò)程內(nèi)容,比如在察看結(jié)果樹(shù)中是無(wú)法找到重定向過(guò)程內(nèi)容的(A重定向到B,此時(shí)只記錄B的內(nèi)容不去記錄A的內(nèi)容)

Follow Redirects(跟隨重定向):Http Request取樣器的默認(rèn)選項(xiàng),當(dāng)響應(yīng)code是3xx時(shí)(301永久性轉(zhuǎn)移,302暫時(shí)性轉(zhuǎn)移),自動(dòng)跳轉(zhuǎn)到目標(biāo)地址。與自動(dòng)重定向不同,Jmeter會(huì)記錄重定向過(guò)程中的所有請(qǐng)求響應(yīng),在查看結(jié)果樹(shù)時(shí)可以看到服務(wù)器返回的內(nèi)容,所以此時(shí)可以對(duì)響應(yīng)的內(nèi)容做關(guān)聯(lián)。

四、JMeter工具常用界面設(shè)置

1、線程組

JMeter界面詳介及如何進(jìn)行壓測(cè)

1、線程數(shù):表示啟動(dòng)的線程數(shù),也就是并發(fā)的數(shù)量。

2、Ramp-Up Period:表示1秒內(nèi)啟動(dòng)1個(gè)線程,默認(rèn)為0,表示程序啟動(dòng)后,立即開(kāi)啟1個(gè)線程,設(shè)置太大或太小都不是很好,設(shè)置的最佳值,Ramp-Up Period = 線程數(shù)/吞吐量。

3、循環(huán)次數(shù):表示每個(gè)線程要發(fā)送多少次請(qǐng)求。

4、調(diào)度器:顧名思義,持續(xù)時(shí)間如果設(shè)置為60,表示持續(xù)1分鐘,通常循環(huán)次數(shù)和調(diào)度器設(shè)置一個(gè)即可。

2、添加HTTP請(qǐng)求JMeter界面詳介及如何進(jìn)行壓測(cè)

一個(gè)HTTP請(qǐng)求有著許多的配置參數(shù),下面將詳細(xì)介紹:

1、名稱:本屬性用于標(biāo)識(shí)一個(gè)取樣器,建議使用一個(gè)有意義的名稱。

2、注釋:對(duì)于測(cè)試沒(méi)有任何作用,僅用戶記錄用戶可讀的注釋信息。

3、服務(wù)器名稱或IP :HTTP請(qǐng)求發(fā)送的目標(biāo)服務(wù)器名稱或IP地址。

4、端口號(hào):目標(biāo)服務(wù)器的端口號(hào),默認(rèn)值為80 。

5、協(xié)議:向目標(biāo)服務(wù)器發(fā)送HTTP請(qǐng)求時(shí)的協(xié)議,可以是http或者是https ,默認(rèn)值為http 。

6、方法:發(fā)送HTTP請(qǐng)求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。

7、Content encoding :內(nèi)容的編碼方式,默認(rèn)值為iso8859

8、路徑:目標(biāo)URL路徑(不包括服務(wù)器地址和端口)

9、自動(dòng)重定向:如果選中該選項(xiàng),當(dāng)發(fā)送HTTP請(qǐng)求后得到的響應(yīng)是302/301時(shí),JMeter 自動(dòng)重定向到新的頁(yè)面。

10、Use keep Alive : 當(dāng)該選項(xiàng)被選中時(shí),jmeter 和目標(biāo)服務(wù)器之間使用 Keep-Alive方式進(jìn)行HTTP通信,默認(rèn)選中。

11、Use multipart/from-data for HTTP POST :當(dāng)發(fā)送HTTP POST 請(qǐng)求時(shí),使用Use multipart/from-data方法發(fā)送,默認(rèn)不選中。

12、同請(qǐng)求一起發(fā)送參數(shù) : 在請(qǐng)求中發(fā)送URL參數(shù),對(duì)于帶參數(shù)的URL ,jmeter提供了一個(gè)簡(jiǎn)單的對(duì)參數(shù)化的方法。用戶可以將URL中所有參數(shù)設(shè)置在本表中,表中的每一行是一個(gè)參數(shù)值對(duì)(對(duì)應(yīng)RUL中的 名稱1=值1)。

13、同請(qǐng)求一起發(fā)送文件:在請(qǐng)求中發(fā)送文件,通常,HTTP文件上傳行為可以通過(guò)這種方式模擬。/14、從HTML文件獲取所有有內(nèi)含的資源:當(dāng)該選項(xiàng)被選中時(shí),jmeter在發(fā)出HTTP請(qǐng)求并獲得響應(yīng)的HTML文件內(nèi)容后,還對(duì)該HTML進(jìn)行Parse 并獲取HTML中包含的所有資源(圖片、flash等),默認(rèn)不選中,如果用戶只希望獲取頁(yè)面中的特定資源,可以在下方的Embedded URLs must match 文本框中填入需要下載的特定資源表達(dá)式,這樣,只有能匹配指定正則表達(dá)式的URL指向資源會(huì)被下載。

15、用作監(jiān)視器:此取樣器被當(dāng)成監(jiān)視器,在Monitor Results Listener 中可以直接看到基于該取樣器的圖形化統(tǒng)計(jì)信息。默認(rèn)為不選中。

16、Save response as MD5 hash:選中該項(xiàng),在執(zhí)行時(shí)僅記錄服務(wù)端響應(yīng)數(shù)據(jù)的MD5值,而不記錄完整的響應(yīng)數(shù)據(jù)。在需要進(jìn)行數(shù)據(jù)量非常大的測(cè)試時(shí),建議選中該項(xiàng)以減少取樣器記錄響應(yīng)數(shù)據(jù)的開(kāi)銷(xiāo)。

3、聚合報(bào)告簡(jiǎn)介

我認(rèn)為聚合報(bào)告應(yīng)該是JMeter壓力測(cè)試軟件中最重要的報(bào)告。

1. #Samples:樣本數(shù),如果你看過(guò)上一篇,這個(gè)就是前面我們那個(gè)公式算出來(lái)的結(jié)果

(Loop Count(Loop Controler)*Number of Threads*Loop Count(group))

2. Average:平均響應(yīng)時(shí)間。

3. Median:中位數(shù),50%用戶響應(yīng)時(shí)間。

4. Line:90%用戶響應(yīng)時(shí)間。

5. Min:最小響應(yīng)時(shí)間。

6. Max:最大響應(yīng)時(shí)間。

7. Error%:本次測(cè)試中出現(xiàn)錯(cuò)誤的請(qǐng)求的數(shù)量/請(qǐng)求的總數(shù)

8. Throughput:吞吐量,表示每秒完成的請(qǐng)求數(shù)。

9. KB/Sec:每秒從服務(wù)器端接收到的數(shù)據(jù)量(只是接收)。

五、JMeter壓力測(cè)試時(shí)遇到的常見(jiàn)問(wèn)題

1、Response Times Over Time中的峰值和聚合報(bào)告中的最大值為何不一致?

因?yàn)镽esponse Times Over Time中的點(diǎn)是一個(gè)時(shí)間的概念,表示的是一段時(shí)間內(nèi)的請(qǐng)求的平均響應(yīng)時(shí)間,而聚合報(bào)告中的最大值表示的是一個(gè)請(qǐng)求的最大響應(yīng)時(shí)間,因此Response Times Over Time的峰值和聚合報(bào)告中的最大值不一致。

2、Response Times Over Time圖中有多少個(gè)點(diǎn),和請(qǐng)求數(shù)有什么關(guān)系?

Response Times Over Time中的點(diǎn)是一個(gè)時(shí)間的概念,在setting中可以設(shè)置,每隔500ms記錄一個(gè)點(diǎn),這個(gè)點(diǎn)就表示這段時(shí)間內(nèi)的請(qǐng)求的平均響應(yīng)時(shí)間。

3、壓測(cè)接口時(shí),并發(fā)一段時(shí)間后,會(huì)報(bào)java.net.BindException: Address already in use: connect

原因:

Jmeter里的http sample勾選了keep alive,導(dǎo)致會(huì)話一直保持,而windows本身的端口有限,導(dǎo)致端口被占用完后,無(wú)法分配新的端口,因此會(huì)產(chǎn)生java.net.BindException: Address already in use: connect 報(bào)錯(cuò)。

解決方案:

HTTP SAMPLE 不勾選keep alive

4、internal server error是什么意思?

internal server error錯(cuò)誤通常發(fā)生在用戶訪問(wèn)網(wǎng)頁(yè)的時(shí)候發(fā)生,該錯(cuò)誤的意思是因特網(wǎng)服務(wù)錯(cuò)誤。能夠引起internal server error報(bào)錯(cuò)的原因有多個(gè),如果你是網(wǎng)站主的話,可以對(duì)下列情形進(jìn)行一一排查。

(1)服務(wù)器資源超載

如果網(wǎng)站文件沒(méi)有做過(guò)修改,最有可能的是同服務(wù)器的資源超載:即同一時(shí)間內(nèi)處理器有太多的進(jìn)程需要處理的時(shí)候,會(huì)出現(xiàn)500錯(cuò)誤。借助SSH,可以在命令行中輸入以下命令查看:ps faux ps faux |grep username 如果你查到某個(gè)進(jìn)程消耗過(guò)多資源,可以用kill命令強(qiáng)制關(guān)閉這個(gè)進(jìn)程,只需輸入該進(jìn)程的進(jìn)程號(hào)(Pid):kill -9 pid。

(2)文件權(quán)限設(shè)置錯(cuò)誤

500錯(cuò)誤還有可能是對(duì)文件設(shè)置了不正確的權(quán)限:后臺(tái)目錄和文件的權(quán)限默認(rèn)應(yīng)該是755,而圖片,文字等html文件應(yīng)該是644,所以如果在剛剛上傳文件后出現(xiàn)500錯(cuò)誤,應(yīng)該主要檢查文件權(quán)限設(shè)置??梢允褂肍TP軟件選中所有文件,然后批量修改文件權(quán)限。

(3)htaccess文件寫(xiě)入錯(cuò)誤的代碼

在使用某些wordpress SEO插件的時(shí)候,插件會(huì)改寫(xiě).htacess文件,如果語(yǔ)法錯(cuò)誤的話就有可能造成500錯(cuò)誤!

5、Internal server error 500 問(wèn)題解決思路

(1)明確錯(cuò)誤含義

500 Internal Server Error

通用錯(cuò)誤消息,服務(wù)器遇到了一個(gè)未曾預(yù)料的狀況,導(dǎo)致了它無(wú)法完成對(duì)請(qǐng)求的處理。沒(méi)有給出具體錯(cuò)誤信息。

根據(jù)這個(gè)描述,基本可以排除客戶端以及網(wǎng)絡(luò)因素,需要重點(diǎn)關(guān)注服務(wù)端的狀態(tài)。

我們系統(tǒng)服務(wù)端的架構(gòu)如下圖:

JMeter界面詳介及如何進(jìn)行壓測(cè)

接下來(lái)就要根據(jù)這個(gè)架構(gòu)由前往后一層一層排查。

(2)檢查HAProxy

重點(diǎn)排查HAProxy當(dāng)前是否可用,負(fù)荷是否超標(biāo),包括下面的一些指標(biāo)。

排查項(xiàng) 結(jié)果
CPU是否正常 正常
內(nèi)存是否正常 正常
線程數(shù)是否超過(guò)配置上限 正常
連接數(shù)是否超過(guò)配置上限

正常

排查之后發(fā)現(xiàn)一切正常,與版本更新前的數(shù)據(jù)作比較,也沒(méi)有出現(xiàn)大幅度波動(dòng)。

而在查看請(qǐng)求日志時(shí),發(fā)現(xiàn)大量500錯(cuò)誤信息,說(shuō)明HAProxy出異常的可能性較小,錯(cuò)誤更可能來(lái)自HAProxy之后的環(huán)節(jié)。

(3)檢查Jetty

重點(diǎn)排查jetty的配置信息。

排查項(xiàng) 結(jié)果
配置是否有變動(dòng) 正常
應(yīng)用占用的線程數(shù)是否超過(guò)上限 正常
應(yīng)用占用的線程數(shù)是否超過(guò)上限 正常

雖然jetty配置信息檢查正常,但是在access.log中存在大量500錯(cuò)誤,定位到這里,有兩種可能的原因:

應(yīng)用代碼邏輯問(wèn)題。部分異常信息沒(méi)有被攔截住,直接拋給Jetty,導(dǎo)致500錯(cuò)誤。
Jetty邏輯問(wèn)題。請(qǐng)求沒(méi)有到達(dá)應(yīng)用,而是由于Jetty自身的某些邏輯導(dǎo)致請(qǐng)求被直接返回了。

(4)檢查應(yīng)用

為了驗(yàn)證是否第一個(gè)原因,我們繼續(xù)走查了應(yīng)用代碼,發(fā)現(xiàn)所有的異常都被正確處理了,不存在繼續(xù)往上拋的情況。另外,也檢查了圖片保存的代碼,確認(rèn)文件連接都正確釋放了。

因此,由于應(yīng)用邏輯問(wèn)題導(dǎo)致錯(cuò)誤的可能性很小,那么第二個(gè)原因的嫌疑最大,就是Jetty邏輯問(wèn)題。

如果直接排查Jetty的源碼,太費(fèi)時(shí)費(fèi)力,這個(gè)時(shí)候最好的辦法是實(shí)時(shí)抓包,看看Jetty和應(yīng)用服務(wù)之間到底發(fā)生了什么。

(5)使用tcpdump抓包

使用tcpdump命令抓取從jetty到應(yīng)用服務(wù)之間所有的數(shù)據(jù)包,將結(jié)果輸出到臨時(shí)文件中。
?

tcpdump -i eth0:0 -s0 host 1X.XXX.XXX.XX -w /tmp/out1.cap

使用wireshark打開(kāi)out1.cap文件,查找出現(xiàn)500錯(cuò)誤的數(shù)據(jù)包,然后很意外的看到了下面的邏輯。

JMeter界面詳介及如何進(jìn)行壓測(cè)

通過(guò)這段代碼我們發(fā)現(xiàn),jetty對(duì)于請(qǐng)求數(shù)據(jù)的大小做了限制,超過(guò)200000 byte的時(shí)候就會(huì)報(bào)錯(cuò),返回錯(cuò)誤碼500。

App這次更新后,上傳了很多大于200000 byte的圖片,于是便出現(xiàn)了大量的500錯(cuò)誤。

找到問(wèn)題根源,修正起來(lái)就很簡(jiǎn)單了,在WEB-INF目錄下添加jetty-web.xml 文件解決,文件內(nèi)容如下:

<?xml version="1.0"?>
 
<!DOCTYPE Configure PUBLIC "-//MortBay Consulting//DTD Configure//EN"
 
"http://jetty.mortbay.org/configure.dtd">
 
<Configure id="WebAppContext"class="org.eclipse.jetty.webapp.WebAppContext">
 
<Set name="maxFormContentSize"type="int"> 0 </Set>
 
</Configure>

6、JMeter問(wèn)題總結(jié)

出現(xiàn)Internal server error 500錯(cuò)誤,往往意味著服務(wù)端出現(xiàn)一些未知異常,但是在排查的時(shí)候我們不能僅僅只是關(guān)注應(yīng)用服務(wù),而是要關(guān)注從服務(wù)端接收請(qǐng)求開(kāi)始,一直到應(yīng)用服務(wù)的整條鏈路。

以本文中的情景為例,就是從HAProxy 到 Jetty 再到 應(yīng)用服務(wù),中間的任何一個(gè)環(huán)節(jié)都有可能導(dǎo)致500錯(cuò)誤。

另外,其實(shí)在一開(kāi)始我們就可以采用抓包的方式去排查,因?yàn)樵诎鼣?shù)據(jù)中包含了完整請(qǐng)求/響應(yīng)消息,比查看CPU、線程、配置信息要更加快捷,直接。

六、Linux查看程序運(yùn)行情況

1、Top

top命令是Linux下常用的性能分析工具,能夠?qū)崟r(shí)顯示系統(tǒng)中各個(gè)進(jìn)程的資源占用狀況,類(lèi)似于Windows的任務(wù)管理器。

top顯示系統(tǒng)當(dāng)前的進(jìn)程和其他狀況,是一個(gè)動(dòng)態(tài)顯示過(guò)程,即可以通過(guò)用戶按鍵來(lái)不斷刷新當(dāng)前狀態(tài).如果在前臺(tái)執(zhí)行該命令,它將獨(dú)占前臺(tái),直到用戶 終止該程序?yàn)橹? 比較準(zhǔn)確的說(shuō),top命令提供了實(shí)時(shí)的對(duì)系統(tǒng)處理器的狀態(tài)監(jiān)視.它將顯示系統(tǒng)中CPU最“敏感”的任務(wù)列表.該命令可以按CPU使用.內(nèi)存使用和執(zhí)行時(shí)間 對(duì)任務(wù)進(jìn)行排序;而且該命令的很多特性都可以通過(guò)交互式命令或者在個(gè)人定制文件中進(jìn)行設(shè)定。

在linux系統(tǒng)中,top命令可謂是分析系統(tǒng)性能最方便的工具,而且top還是個(gè)交互式工具;通過(guò)top命令可以清楚地了解到正在執(zhí)行的進(jìn)程信息包括進(jìn)程ID,內(nèi)存占用率,CPU占用率等。其實(shí)就跟window的任務(wù)管理器類(lèi)似。

2、查看CPU使用率

sar -u 1 5

表示每1秒采集一次,共采集5次。

這個(gè)命令可根據(jù)實(shí)際線程組中的設(shè)置,進(jìn)行CPU使用率方面的查看。

[root@sss ~]# sar -u 1 5
Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
 
04:56:03 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
04:56:04 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
04:56:05 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
04:56:06 PM     all      0.99      0.00      0.99      0.00      0.00     98.02
04:56:07 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
04:56:08 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
Average:        all      0.20      0.00      0.20      0.00      0.00     99.60

3、查看內(nèi)存占用情況

free -mJMeter界面詳介及如何進(jìn)行壓測(cè)

1352/1838即為內(nèi)存占用。

4、Linux如何統(tǒng)計(jì)進(jìn)程的CPU利用率

Linux的/proc文件系統(tǒng),可以看到自啟動(dòng)時(shí)候開(kāi)始,所有CPU消耗的時(shí)間片;對(duì)于個(gè)進(jìn)程,也可以看到進(jìn)程消耗的時(shí)間片。這是一個(gè)累計(jì)值,可以"非阻塞"的輸出。獲得一定時(shí)間間隔的兩次統(tǒng)計(jì)就可以計(jì)算出這段時(shí)間內(nèi)的進(jìn)程CPU利用率。

所以,是否存在一種簡(jiǎn)單的,非阻塞的方式獲得進(jìn)程的CPU利用率? 答案是:“沒(méi)有”。這里給出一個(gè)很恰當(dāng)?shù)谋扔鳎?這就像有人給你一張照片,要你回答照片中車(chē)子的速度一樣"。

1、/proc/stat 統(tǒng)計(jì)總CPU消耗

計(jì)算CPU總消耗可以使用如下shell命令:

cat /proc/stat|grep "cpu "|awk '{for(i=2;i<=NF;i++)j+=$i;print "cpu_total_slice " j;}'

cpu_total_slice 19208187744

2、進(jìn)程消耗的CPU時(shí)間片

在proc文件系統(tǒng)中,可以通過(guò)/proc/[pid]/stat獲得進(jìn)程消耗的時(shí)間片,輸出的第14、15、16、17列分別對(duì)應(yīng)進(jìn)程用戶態(tài)CPU消耗、內(nèi)核態(tài)的消耗、用戶態(tài)等待子進(jìn)程的消耗、內(nèi)核態(tài)等待子進(jìn)程的消耗(man proc)。所以進(jìn)程的CPU消耗可以使用如下命令:

cat /proc/9583/stat|awk '{print "cpu_process_total_slice " $14+$15+$16+$17}'

cpu_process_total_slice 1068099

3、"非阻塞"的計(jì)算進(jìn)程CPU利用率

從這里也看到,是沒(méi)有某個(gè)時(shí)刻CPU利用率的說(shuō)法的,也就沒(méi)法獲得某個(gè)時(shí)刻的CPU利用率。這就像物理中的"速度"的概念,沒(méi)有某一時(shí)刻速度的概念,速度一定是一個(gè)時(shí)間段之內(nèi)的。那么要"非阻塞"計(jì)算某個(gè)進(jìn)程CPU利用率,則需要取兩次事件間隔進(jìn)行計(jì)算,這兩次事件間隔的操作可以是非阻塞的。計(jì)算辦法如下:

  • 時(shí)刻A,計(jì)算操作系統(tǒng)總CPU時(shí)間片消耗total_cpu_slice_A;計(jì)算進(jìn)程總CPU時(shí)間片消耗;total_process_slice_A ;
  • 時(shí)刻B,計(jì)算操作系統(tǒng)總CPU時(shí)間片消耗total_cpu_slice_B;計(jì)算進(jìn)程總CPU時(shí)間片消耗;total_process_slice_B。

B時(shí)刻就可以"非阻塞"的計(jì)算這段時(shí)間進(jìn)程的CPU利用率了:

100%*(total_process_slice_B-total_process_slice_A)/(total_cpu_slice_B-total_cpu_slice_A)

5、CPU使用率與CPU空閑時(shí)間的關(guān)系?

多任務(wù)操作對(duì)CPU都是分時(shí)間片使用的,比如A進(jìn)程占用10ms,B進(jìn)程占用30ms,然后空閑60ms,再又是A進(jìn)程占用10ms,B進(jìn)程占用30ms,空閑60ms;如果一段時(shí)間內(nèi)都是如此,那么這段時(shí)間內(nèi)的CPU占用率就是40%。

CPU對(duì)線程的響應(yīng)并不是連續(xù)的,通常會(huì)在一段時(shí)間后自動(dòng)中斷線程。未響應(yīng)的線程增加,就會(huì)不斷加大CPU的占用。
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-473937.html

到了這里,關(guān)于JMeter界面詳介及如何進(jìn)行壓測(cè)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 用JMeter對(duì)HTTP接口進(jìn)行壓測(cè)(一)壓測(cè)腳本的書(shū)寫(xiě)、調(diào)試思路

    用JMeter對(duì)HTTP接口進(jìn)行壓測(cè)(一)壓測(cè)腳本的書(shū)寫(xiě)、調(diào)試思路

    Mac OS下使用Homebrew安裝 安裝完畢之后,確保jmeter和groovy沒(méi)問(wèn)題 直接啟動(dòng)JMeter 查看groovy版本 在JMeter中使用腳本語(yǔ)言有BeanShell和Groovy,因?yàn)镚roovy和Java更相近,所以選擇Groovy。雖然以前沒(méi)接觸過(guò)Groovy,但是靠著IDE和官方文檔、Google上手還算順利。 因?yàn)槭切枰?對(duì)整條業(yè)務(wù)流程進(jìn)行

    2024年02月07日
    瀏覽(18)
  • 教程:使用Jmeter對(duì)帶token的接口進(jìn)行壓測(cè)

    教程:使用Jmeter對(duì)帶token的接口進(jìn)行壓測(cè)

    最近在研究并發(fā),用到了Jmeter對(duì)接口進(jìn)行壓力測(cè)試,記錄下使用過(guò)程 一. 配置/bin下的Jmeter.properties,打開(kāi)以下兩項(xiàng)配置,一個(gè)是默認(rèn)的編碼,一個(gè)是默認(rèn)的語(yǔ)言 二. 打開(kāi)jmeter.bat運(yùn)行,新建線程組,在線程組下新建以下內(nèi)容 1. CSV數(shù)據(jù)文件設(shè)置(右鍵添加,在配置元件目錄中)

    2023年04月09日
    瀏覽(38)
  • postman導(dǎo)入請(qǐng)求到j(luò)meter進(jìn)行簡(jiǎn)單壓測(cè),開(kāi)發(fā)同學(xué)一學(xué)就會(huì)

    這個(gè)事情也是最近做的,因?yàn)榫€上nginx被我換成了openresty,然后接入層服務(wù)也做了較大改動(dòng),雖然我們這個(gè)app(內(nèi)部辦公類(lèi))并發(fā)不算高,但好歹還是壓測(cè)一下,上線時(shí)心里也穩(wěn)一點(diǎn)。 于是用jmeter簡(jiǎn)單壓測(cè)下看看,這里記錄一下。 這次也就找了幾個(gè)接口來(lái)壓:登錄接口、登錄

    2024年04月25日
    瀏覽(54)
  • jmeter如何壓測(cè)和存儲(chǔ)

    jmeter如何壓測(cè)和存儲(chǔ)

    1、建立一個(gè)空表: 1 CREATE ? TABLE ? test_data ( id NUMBER,? name ? VARCHAR2(50), age NUMBER ); 2、建立一個(gè)存儲(chǔ)過(guò)程: 1 2 3 4 5 6 7 8 9 CREATE ? OR ? REPLACE ? PROCEDURE ? insert_test_data (n? IN ? NUMBER)? AS BEGIN ?? --EXECUTE IMMEDIATE \\\'truncate table test_data\\\'; ?? FOR ? i? IN ? 1..n LOOP ???? INSERT ? INTO ? tes

    2024年02月14日
    瀏覽(18)
  • 基于Docker構(gòu)建CI/CD工具鏈(七)使用Jmeter進(jìn)行自動(dòng)化壓測(cè)

    基于Docker構(gòu)建CI/CD工具鏈(七)使用Jmeter進(jìn)行自動(dòng)化壓測(cè)

    上一篇文章中,我們?cè)敿?xì)介紹了構(gòu)建 Apifox Cli 的 Docker 鏡像的步驟,并通過(guò)簡(jiǎn)單的示例演示了如何利用 GitLab 的 CI/CD 功能,將構(gòu)建好的鏡像利用在自動(dòng)化測(cè)試作業(yè)中。在今天的文章中,我們將重點(diǎn)討論如何構(gòu)建 JMeter 的 Docker 鏡像,并演示如何在 GitLab 的 CI/CD 作業(yè)中利用該鏡像

    2024年04月16日
    瀏覽(35)
  • 性能測(cè)試工具jmeter對(duì)數(shù)據(jù)庫(kù)mysql進(jìn)行性能測(cè)試(壓測(cè)保姆級(jí)教程)

    性能測(cè)試工具jmeter對(duì)數(shù)據(jù)庫(kù)mysql進(jìn)行性能測(cè)試(壓測(cè)保姆級(jí)教程)

    打開(kāi)mysql官網(wǎng):MySQL 找到mysql connectors,選擇操作系統(tǒng)獨(dú)立版本,將下載jar包導(dǎo)入到j(luò)meter的lib目錄下。 參考文檔:https://www.jb51.net/article/190860.htm 1、添加測(cè)試計(jì)劃 2、添加JDBC request 3、添加JDBC connection configuration,并修改配置 1、Cannot create PoolableConnectionFactory (Communications link fai

    2024年02月02日
    瀏覽(24)
  • Postman 如何進(jìn)行壓測(cè)

    Postman 如何進(jìn)行壓測(cè)

    1.接口 2.自定義斷言 斷言即根據(jù)自定義判斷你返回的結(jié)果怎樣才算請(qǐng)求成功,不單純是指接口調(diào)用200。斷言格式有很多種興趣可以網(wǎng)上查找,這里我用最簡(jiǎn)單方式。 3.點(diǎn)擊 Runner 4.選擇你要壓測(cè)的接口列表 5.設(shè)置參數(shù) 6.讀取參數(shù)列表 我這里使用的是 txt 格式文件,參數(shù)名稱在開(kāi)

    2024年02月15日
    瀏覽(16)
  • jmeter壓測(cè)步驟

    jmeter壓測(cè)步驟

    參考:使用Jmeter壓測(cè)的第一個(gè)接口 第一步,在測(cè)試計(jì)劃里添加一個(gè)線程組(要壓測(cè)的接口名稱),如圖所示,在測(cè)試計(jì)劃里右鍵--添加--線程--線程組就可以了。 第二步,設(shè)置線程組參數(shù),如下圖所示。 第三步,添加請(qǐng)求,在線程組上右鍵--添加--取樣器--HTTP請(qǐng)求,具體參數(shù)如

    2024年02月15日
    瀏覽(35)
  • 用jmeter壓測(cè)tcp

    用jmeter壓測(cè)tcp

    在工作中有個(gè)接口是tcp協(xié)議的,然后需要壓測(cè)一下,就想到j(luò)meter有現(xiàn)成的tcp取樣器,搜了一下,壓測(cè)流程大致和http差不多,需要注意的是tcp請(qǐng)求的一些設(shè)置,在此記錄一下~ 1.根據(jù)需求改一下配置文件,根據(jù)需求看看自己要發(fā)的是哪一種請(qǐng)求,直接在配置文件里搜索一些tcp,

    2023年04月09日
    瀏覽(23)
  • jmeter隨記2:壓測(cè)

    jmeter隨記2:壓測(cè)

    簡(jiǎn)述 關(guān)于壓測(cè),jmeter更直觀的作用是用來(lái)編寫(xiě)壓測(cè)腳本【請(qǐng)求和壓測(cè)策略】,然后在linux服務(wù)器上執(zhí)行,也可以在本地執(zhí)行,壓測(cè)執(zhí)行腳本在啟動(dòng)jmeter服務(wù)的時(shí)候,會(huì)打印出執(zhí)行壓測(cè)的命令 一、壓測(cè)步驟 step1: 編寫(xiě)jmeter腳本,以及壓測(cè)策略 a、若想壓的接口很多 且都是相同域

    2024年02月15日
    瀏覽(35)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包