思路:以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)
引用名稱:
其他地方引用時的變量名稱,名稱只能是一個,引用方法:${變量名稱}
正則表達式:
數據提取器,一般簡單的通用語法就是:左邊界(.*?)右邊界,左右邊界就是為了能准確定位到想匹配的內容
具體語法如下:
提到正則表達式,必須要說一下匹配的兩種模式:貪婪和非貪婪
貪婪與非貪婪模式是兩種不同的表達式匹配行為,貪婪模式在整個表達式匹配成功的前提下,盡可能多的匹配,而非貪婪模式在整個表達式匹配成功的前提下,盡可能少的匹配
模板:
匹配數字:
缺省值:
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 處在空閑狀態時間百分比