【性能測試】接口壓力測試,常見名詞和基礎性能分析解析。

【常見名詞】

QPS(TPS):每秒鐘request/事務 數量

 併發數: 系統同時處理的request/事務數

 響應時間:  一般取平均響應時間

(很多人經常會把併發數和TPS理解混淆)

理解了上面三個要素的意義之後,就能推算出它們之間的關係:

QPS(TPS)= 併發數/平均響應時間(包括usetime+think time)

用戶數評估:

1.併發用戶數=tps*(runtime+thinktime)

2.在線活動用戶數,和在線峯值用戶數

3.根據經驗,總註冊人數的20%左右。

【性能分析】

top、sar、dstat、mpstat、vmstat、ps、free、

CPU:vmstat、sar -u 、dstat、mpstat -P ALL、ps;vmstat的r、sar -q的runq-sz、dstat-p的run。

內存:free、vmstat、sar -r、ps;vmstat、sar -W、dmesg | grep killed

網絡:sar -n DEV、inconfig RX/TX、cat /proc/net/dev、incstat的util;inconfig dropped、netstat -s 的“segments retransmited”計數、sar -n EDEV rxdrop txdrop 有計數;inconfig的error、netstat -i的RX-ERR和TX-ERR、sar -n EDEV的“rxerr/s""txerr/s”、ip -s link的errors

IO:iostat -XZ、sar -d、iotop、cat /proc/pid/sched | grep iowait;iostat -xnz 1、iostat wait、dmesg、smartctl /dev/sda.

1.用戶感知的響應時間=服務器響應時間+網絡時間

響應過程-服務器時間:用戶發送請求-服務器收到請求-服務器和DB數據庫,文件系統的數據交互處理-服務器返回數據-界面展示數據

網絡時間:服務供應商的差異-網絡延遲-網絡擁堵阻塞

定位問題:應用程序、操作系統、服務器設備、網絡環節、系統資源等多方面綜合排查。

虛擬內存(SWAP交換區):在系統設計時,當系統的物理內存不夠新程序使用的時候,就需要將長時間未操作的程序的物理內存釋放到虛擬內存做備用,把物理內存供新程序使用。等被佔用內存的程序被激活使用後,又從虛擬內存中恢復已保存的數據到物理內存中。

工具排查:

1.整體系統CUP利用率:CPU的執行速度與性能好壞存在決定性作用。期望cpu平均可用率一般不低於20%。

瞭解處理器型號、處理器的邏輯、主頻率、cache大小、是否支持超線程技術。檢測流程:若程序導致cop處於滿負載狀態下,通過系統監控分析工具,檢查相關係統日誌、web服務器應用日誌、DB數據庫日誌等。結合一些輔助命令如top、free、uptime、sar等輔助分析cpu爲何被完全佔用,然後根據原因尋找優化方案。

日誌舉例:如8%id,表示cpu可用閒置率只剩下8%,排序查看佔用最大的幾個程序,根據程序的監控工具分析,是否需要考慮做負載均衡或者加強機器性能。

監控工具舉例:

java超載,則用jvm自帶的命令工具(jstat、jmap、jvisualvm、jconsole)等來分析。

mysql超載,可以用數據庫監控工具(spotlight、monyog、或者命令行工具)來分析。

 

2.內存利用率:內存大小是影響性能的核心指標,當內存太小,容易引起系統進程阻塞,應用會非常緩慢,甚至失去響應,嚴重會導OOM(內存溢出)從而引起進程被系統殺死,最嚴重會導致重啓。但是內存太大,閒置太多,也會引起浪費資源,老式32位處理器的操作系統,由於尋址範圍有限,會導致系統無法使用那麼“大“的內存,所以大部分服務器都是64位,RAM內存128G或者更大的內存。

linux命令:top查看cpu可用率;free查看內存使用狀態;vmstat 2 每兩秒採集一次服務器總數據。

free狀態內存解釋:used已使用物理內存總量;free空閒內存總量;buffers用作內核緩存的內存量;cached緩衝的交換區總量;swaptotal交換區總量;swap used 已使用的交換區總量;swap free 空閒交換區總量。

 

3.磁盤I/O的利用率和延遲:訪問離不開系統的磁盤數據的讀寫,I/O讀寫的性能也會直接影響到系統程序的性能,和CPU處理頻率的物理操作比較,磁盤I/O是系統中最慢的一部分,好比分鐘和毫秒的比較。針對I/O的場景模型,我們要考慮的有IO的TPS(每秒請求的事務數)、平均IO數據、平均隊列長度、平均服務時間、IO利用率(磁盤Busy time%)等指標。

 

4.網絡利用率:網絡帶寬、響應時間、網絡延遲、阻塞等都是影響系統性能的因素。假設網絡不穩定、不安全,會導致應用程序丟失、超市、阻塞、波動率大燈異常。我們需要完善網絡配置,考慮因素有網絡是否可達、防火牆是否開啓、端口的訪問、帶寬是否被限制、路由的尋址、網絡的延時等。

 

5.總進程數據分析:vmstat 2 1,每兩秒採集一次數據,一共採集1次,去掉1就一直採集直到關閉。

【vmstat 2 命令】表示:每2秒採集一次總進程的數據(和top展示單個線程數據不同),包括服務器的CPU使用率,內存使用,虛擬內存交換情況,IO讀寫情況

r 表示運行隊列(就是說多少個進程真的分配到CPU),我測試的服務器目前CPU比較空閒,沒什麼程序在跑,當這個值超過了CPU數目,就會出現CPU瓶頸了。這個也和top的負載有關係,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,服務器的狀態很危險。top的負載類似每秒的運行隊列。如果運行隊列過大,表示你的CPU很繁忙,一般會造成CPU使用率很高。

b 表示阻塞的進程,這個不多說,進程阻塞,大家懂的。

swpd 虛擬內存已使用的大小,如果大於0,表示你的機器物理內存不足了,如果不是程序內存泄露的原因,那麼你該升級內存了或者把耗內存的任務遷移到其他機器。

free   空閒的物理內存的大小,我的機器內存總共8G,剩餘3415M。

buff   Linux/Unix系統是用來存儲,目錄裏面有什麼內容,權限等的緩存,我本機大概佔用300多M

cache cache直接用來記憶我們打開的文件,給文件做緩衝,我本機大概佔用300多M(這裏是Linux/Unix的聰明之處,把空閒的物理內存的一部分拿來做文件和目錄的緩存,是爲了提高 程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用。)

si  每秒從磁盤讀入虛擬內存的大小,如果這個值大於0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉。我的機器內存充裕,一切正常。

so  每秒虛擬內存寫入磁盤的大小,如果這個值大於0,同上。

bi  塊設備每秒接收的塊數量,這裏的塊設備是指系統上所有的磁盤和其他塊設備,默認塊大小是1024byte,我本機上沒什麼IO操作,所以一直是0,但是我曾在處理拷貝大量數據(2-3T)的機器上看過可以達到140000/s,磁盤寫入速度差不多140M每秒

bo 塊設備每秒發送的塊數量,例如我們讀取文件,bo就要大於0。bi和bo一般都要接近0,不然就是IO過於頻繁,需要調整。

in 每秒CPU的中斷次數,包括時間中斷

cs 每秒上下文切換次數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,我們一般做性能測試時會進行幾千併發甚至幾萬併發的測試,選擇web服務器的進程可以由進程或者線程的峯值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要儘量避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的。

us 用戶CPU時間,我曾經在一個做加密解密很頻繁的服務器上,可以看到us接近100,r運行隊列達到80(機器在做壓力測試,性能表現不佳)。

sy 系統CPU時間,如果太高,表示系統調用時間長,例如是IO操作頻繁。

id  空閒 CPU時間,一般來說,id + us + sy = 100,一般我認爲id是空閒CPU使用率,us是用戶CPU使用率,sy是系統CPU使用率。

wt 等待IO CPU時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章