jmeter性能測試以及數據監控


思路:以cms登錄接口為例,使用隨機函數添加不同的可登錄用戶,然后用正則表達式獲取到可登錄的用戶名,在把可登錄的用戶進行登錄,形成循環 實現不同的用戶登錄,進行並發

一.使用jmeter測試添加用戶,查詢用戶,登錄三個接口的性能

  1.打開jmeter,創建線程組  調通添加用戶的接口   

    協議:http

    服務器名稱或ip:192.168.195.130(部署cms的本地ip)

    端口號:8080

    方法:post 

    添加用戶的接口路徑:/cms/manage/saveSysUser.do

    content encoding:utf-8

    在jmeter的選項中選擇函數助手對話框  選擇 __RandomString函數   進行如下設置  目的是為了生成隨機用戶

    

 

 

      設置好后parameters傳入userAccount=${__RandomString(5,QWERTYUIOPLKJHGFDSAZXCVBNMqwertyiopasdfghjklmnbvcxz1234567890,)} 即可

    或者

    body Data:傳入  userName=${__RandomString(5,QWERTYUIOPLKJHGFDSAZXCVBNMqwertyiopasdfghjklmnbvcxz1234567890,)}&userSex=1&userMobile=18314933160&userEmail=369608314%40qq.com&userAccount=${__RandomString(5,QWERTYUIOPLKJHGFDSAZXCVBNMqwertyiopasdfghjklmnbvcxz1234567890,)}&loginPwd=154236&confirmPwd=154236

    添加HTTP信息頭管理   傳入Cookie 與Content-Type

    

 

 

 

    添加察看結果樹

    添加Summary Report

    線程組設置10個    循環1次

    運行結果如下

    

 

 

        

    Summary Report結果如下

    

 

 

     Label:取樣器別名
    #Samples:取樣器運行次數
    Average:請求(事物)的平均響應時間
    Min:請求最小響應時間
    Max:請求最大響應時間
    Std.Dev:響應時間標准差,標准差越小越好
    Error%:事物錯誤率
    Throughput:吞吐率,即TPS
    Received KB/s:每秒數據包流量
    Sent KB/s:
    Avg.Bytes:平均數據流量

  2.查詢用戶接口 

    協議:http

    服務器名稱或ip:192.168.195.130(部署cms的本地ip)

    端口號:8080

    方法:post 

    查詢用戶的接口路徑:/cms/manage/queryUserList.do

    content encoding:utf-8

    添加HTTP信息頭管理   傳入Cookie 與Content-Type

    查詢接口不需要傳參數默認查詢第1頁 10條用戶信息

    

 

 

     

 

 

    添加正則表達式獲取查詢到的userAccount的值 具體設置如下

    

 

    正則表達式詳解  

    apply to:

    Main sample and sub-samples:作用於父節點取樣器及對應子節點取樣器
    Main sample only:僅作用於父節點取樣器
    Sub-samples only:僅作用於子節點取樣器
    JMeter Variable:作用於jmeter變量(輸入框內可輸入jmeter的變量名稱)

    要檢查的響應字段:樣本數據源

    主體: 接口響應主體內容,默認選擇此項
    信息頭:響應頭的所有內容
    Request Headers:請求頭的所有內容
    url:是對sample的url進行匹配,也就是查看結果樹里請求內容的第一行url,不包含data里的請求參數
    響應代碼:http響應代碼,如101,200,302,404,501等
    響應信息:http響應代碼對應的響應信息,例如:OK, Found(HTTP/1.1 200 Ok;HTTP/1.1 302 Found)

    引用名稱:

    其他地方引用時的變量名稱,名稱只能是一個,引用方法:${變量名稱}

    正則表達式:

    數據提取器,一般簡單的通用語法就是:左邊界(.*?)右邊界,左右邊界就是為了能准確定位到想匹配的內容

    具體語法如下:

    

     提到正則表達式,必須要說一下匹配的兩種模式:貪婪和非貪婪
    貪婪與非貪婪模式是兩種不同的表達式匹配行為,貪婪模式在整個表達式匹配成功的前提下,盡可能多的匹配,而非貪婪模式在整個表達式匹配成功的前提下,盡可能少的匹配

    模板:

    對應正則表達式提取器類型,樣式為:
    $n$。若模板為:$0$,則為整個表達式匹配到的內容,就是包括小括號內跟小括號外的內容,
    若模板為:$1$,則對應正則表達式中的第一個(.*?)所匹配的內容
    若模板為:$2$,則對應正則表達式中的第二個(.*?)所匹配的內容
    若模板為$1$$2$,則把2個(.*?)所匹配的內容拼接起來

 

    匹配數字:

    正則表達式匹配數據的最終結果可以看做一個數組,匹配數字即可看做是數組的第幾個元素。
    當為 0 時,隨機返回匹配的數據。
    當為 1 時,表示返回匹配結果數組的第一個元素
    當為負數(-1,-2,-100都可以)時,表示返回全部元素,並且同時會返回一個元素總數的變量
    在引用時:通過${變量名_1}的方式來取第1個匹配的內容,${變量名_2}來取第2個匹配的內容

 

    缺省值:

    匹配失敗時的默認值。通常用於后續的邏輯判斷,建議使用一些特殊含義的,比如0,NULL,ERROR等。

 

    3.登錄接口

    

    協議:http

    服務器名稱或ip:192.168.195.130(部署cms的本地ip)

    端口號:8080

    方法:post 

    添加用戶的接口路徑:/cms/manage/loginJump.do

    content encoding:utf-8

    添加HTTP信息頭管理   傳入Cookie 與Content-Type

    設置好后parameters傳入userAccount=${userAccount} (引用正則表達式名稱)

               loginPwd=123456

    

 

 

     后置處理器添加Debug PostProcessor查看正則表達式提取的具體值

    

 

 

二.設置持續並發監控服務器資源

1.添加用戶 查詢用戶 登錄 三個接口調通后線程組設置為10個 間隔時間(Ramp-Up period)與循環次數去掉 勾選調度器 設置持續時間60s 設置響應斷言  察看結果樹與Summary Report移動到http請求之外 一起監控 開始執行 具體如下

 

 

 10個並發 壓三個接口  持續一分鍾  導致自己電腦超頻了

  

   

 

 

2.進入到部署cms的服務器當中 使用yum -y install dstat命令 在線安裝dstat性能工具

 使用dstat -c -m -n -d -r -l      監控cpu 內存 網絡  磁盤 io 系統負載情況

 

 

 

下面對顯示出來的部分信息作一些說明: 

cpu:hiq、siq 分別為硬中斷和軟中斷次數。

system:int、csw 分別為系統的中斷次數(interrupt)和上下文切換(context switch)。 

其他的都很好理解。

語法 

dstat [-afv] [options..] [delay [count]]

常用選項 

-c:顯示 CPU 系統占用,用戶占用,空閑,等待,中斷,軟件中斷等信息。 

-C:當有多個 CPU 時候,此參數可按需分別顯示 cpu 狀態,例:-C 0,1 是顯示 cpu0 和 cpu1 的信息。 

-d:顯示磁盤讀寫數據大小。

-D hda,total:include hda and total。

-n:顯示網絡狀態。 

-N eth1,total:有多塊網卡時,指定要顯示的網卡。 

-l:顯示系統負載情況。 

-m:顯示內存使用情況。 

-g:顯示頁面使用情況。 

-p:顯示進程狀態。 

-s:顯示交換分區使用情況。 

-S:類似 D/N。 

-r:I/O 請求情況。 

-y:系統狀態。 

--ipc:顯示 ipc 消息隊列,信號等信息。 

--socket:用來顯示 tcp udp 端口狀態。 

-a:此為默認選項,等同於 - cdngy。 

-v:等同於 -pmgdsc -D total。 

--output 文件:此選項也比較有用,可以把狀態信息以 csv 的格式重定向到指定的文件中,以便日后查看。

例:dstat --output /root/dstat.csv & 此時讓程序默默的在后台運行並把結果輸出到 / root/dstat.csv 文件中。

當然 dstat 還有很多更高級的用法,常用的基本這些選項,更高級的用法可以結合 man 文檔。

監測界面各參數含義 (部分) 

Procs

r: 運行的和等待 (CPU 時間片) 運行的進程數,這個值也可以判斷是否需要增加 CPU(長期大於 1)

b: 處於不可中斷狀態的進程數,常見的情況是由 IO 引起的

Memory

swpd: 切換到交換內存上的內存 (默認以 KB 為單位)。如果 swpd 的值不為 0,或者還比較大,比如超過 100M 了,但是 si, so 的值長期為 0,這種情況我們可以不用擔心,不會影響系統性能。

free: 空閑的物理內存

buff: 作為 buffer cache 的內存,對塊設備的讀寫進行緩沖

cache: 作為 page cache 的內存, 文件系統的 cache。如果 cache 的值大的時候,說明 cache 住的文件數多,如果頻繁訪問到的文件都能被 cache 住,那么磁盤的讀 IO bi 會非常小。

Swap

si: 交換內存使用,由磁盤調入內存

so: 交換內存使用,由內存調入磁盤

內存夠用的時候,這 2 個值都是 0,如果這 2 個值長期大於 0 時,系統性能會受到影響。磁盤 IO 和 CPU 資源都會被消耗。

我發現有些朋友看到空閑內存 (free) 很少或接近於 0 時,就認為內存不夠用了,實際上不能光看這一點的,還要結合 si,so,如果 free 很少,但是 si,so 也很少 (大多時候是 0),那么不用擔心,系統性能這時不會受到影響的。

磁盤 IO

bi: 從塊設備讀入的數據總量 (讀磁盤) (KB/s)

bo: 寫入到塊設備的數據總理 (寫磁盤) (KB/s)

注: 隨機磁盤讀寫的時候,這 2 個 值越大(如超出 1M),能看到 CPU 在 IO 等待的值也會越大

System

in: 每秒產生的中斷次數

cs: 每秒產生的上下文切換次數

上面這 2 個值越大,會看到由內核消耗的 CPU 時間會越多

Cpu

usr: 用戶進程消耗的 CPU 時間百分比

us 的值比較高時,說明用戶進程消耗的 CPU 時間多,但是如果長期超過 50% 的使用,那么我們就該考慮優化程序算法或者進行加速了 (比如 PHP/Perl)

sys: 內核進程消耗的 CPU 時間百分比

sys 的值高時,說明系統內核消耗的 CPU 資源多,這並不是良性的表現,我們應該檢查原因。

wai: IO 等待消耗的 CPU 時間百分比

wa 的值高時,說明 IO 等待比較嚴重,這可能是由於磁盤大量作隨機訪問造成,也有可能是磁盤的帶寬出現瓶頸 (塊操作)。

idl: CPU 處在空閑狀態時間百分比

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM