【學習筆記】性能測試常用名詞解析及學習筆記整理。

 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時間。

 

【應用類型分類】系統結構從上向下、操作系統資源從下向上,2種方式分析。

IO bound:表示高負荷的內存使用以及存儲系統,大量數據處理的存儲過程。如:mysql、oracle異常。

CPU bound:高負荷的cpu佔用,一個批量處理cpu請求以及數學計算的過程。如webserver、mailsever

 

【定位分析】

CPU:50%警告、70%告警;90%嚴重

穩定運行時:

1.vmstat統計1-id的計數;2.sar -u統計1-%idle的計數;3.dstat統計1-id1的計數;

4.mpstat -P ALL統計1-%idle的計數;5.ps統計cpu的計數

滿載負荷時:

1.vmstat,r計數大於1則表示負載;2.sar -q,runq-sz邏輯顆數;3.dstat -p,run的cpu邏輯顆。

異常和錯誤時:

安裝perf捕獲處理器錯誤信息,需要2.6.31以上版本號纔可支持。(查看版本號命令:cat /proc/version、或者uname -r),官方說明:http://www.brendangregg.com/perf.html

常用命令(安裝工具的時候注意linux聯網):安裝yum install perf*、perf --help、perf list

 

內存:50%注意、70%告警;80%嚴重

穩定運行時:

1.free,查看使用情況;2.vmstat,查看使用情況;3.sar -r;4.ps。

滿載:

1.vmstat,查看si/so比例輔助swapd和free。so數值越大,swapd佔比越高,內存肯定已經飽和。

2.sar-W,查看次缺頁數。sar命令次缺頁面多意味着已經在不停地和swap打交道,證明內存已飽和。

3.查看內核日誌有誤OOM內存溢出機制的kill進程。當內存不夠會出發內核的OOM機制。

4.dmesg | grep killed。

異常和錯誤:

1.查看內核有誤physical failures。2.通過工具valgrind等進行檢查。有計數則異常。

 

網絡:通過查看發現收發包的吞吐速率達到網卡的最大上限,網絡數據報文有因爲這類原因而引發的丟包、阻塞等現象都證明當前網絡可能存在瓶頸,在性能測試爲了減少網絡的影響,一般我們都是在局域網中進行測試執行。

穩定運行時:1.sar -r DEV的收發計數大於網卡上限,表示收發包的吞吐速率達到網卡上限;2.ifconfig RX/TX帶寬超過網卡上限,表示有延遲;3.cat /proc/net/dev的速率超過上限,表示有丟包;4.nicstat的util的基本滿負荷,表示有阻塞。

滿載時:1.ifconfig dropped有計數;2.netstat -s“segments retransmited”有計數;3.sar -n EDEV rxdrop txdrop有計數。表示統計的丟包有計數,證明已經滿了。

錯誤:1.ifconfig,errors錯誤有計數;2. netstat -i,"RX-ERR"/"TX-ERR"錯誤有計數;3.sar -n EDEV,rxerr/s""txer/s";4.ip -s link,”errors“錯誤有計數。

 

IO:40%注意;60%高警;80%阻塞。

正常運行:1.iostat -xz,%util參數;2.sar -d,%util參數;3.iotop的利用率很高;4.cat /proc/pid/sched |grep iowait;

滿載:1.iosstat -xnz 1,“avgqu-sz”>則表示有滿載嫌疑;2.iostat await>70,有滿載嫌疑;

錯誤:1.dmesg 查看io錯誤 ;2.smartctl /dev/sda查看錯誤信息。

 

【實際案例】

一、系統負載監控案例:CPU顆粒數爲恆定值,超過則阻塞。

命令:

1.uptime(運行時長、用戶數、服務器過去1分鐘、5分鐘、15分鐘隊列中的平均進程數負載數)

2.w(當前在線用戶的詳細信息),如果運行時長較短,可能是重啓過,需要檢查是否異常導致重啓

3.如果平均進程負載數0.8以下,表示正常。1-3表示負載。5-15表示有問題。15以上負載嚴重,需要分析進程調度策略,檢查是否已經引起阻塞。如有阻塞,需要用ps和top檢查實時狀態。

4.實時監控小技巧:uptime |awk '{print (NF-2)}',uptime |awk '{print (NF-1)}',uptime |awk '{print NF}'

字段解釋:

%sy內核空間佔用cpu百分比;

%ni用戶進程空間內改變過優先級的進程佔用CPU百分比;

%id空閒CPU百分比

%wa等待輸入輸出的CPU時間百分比;過高需要iostat和sar分析IO性能是否有瓶頸。

%hi硬中斷佔用CPU百分比;過高需要/proc/interrupts、/proc/irq/pid/smp_affinity、服務irqbalance是否配置成功、以及CPU的頻率,通過這些命令幫助系統打散優化系統的硬件中斷

%si軟中斷佔用CPU百分比;常見中斷由網絡引起,從網卡到IP層的數據報文收發延遲,以及長時間寫日誌導致軟件中斷。

 

二、系統監控分析案例:

常用命令:top、htop、dstat、nmon、glance等用戶資源分析命令。

重點命令:top最全、最完整、最頻繁的命令,類似windows的任務管理器。實時更新正在運行的進程和系統載荷情況,包括系統負載、cpu利用分佈情況、內存使用、每個進程的內存使用情況等信息。

TOP頁面分解:

1.任務隊列信息;2.進程狀態信息;3.CPU信息;4.內存信息;5.進程信息;

 

CPU監控:

1.當前cpu利用率=1-%id=%us+%sy(內核空間佔用cpu的百分比)+%si(軟中斷佔用cpu的百分比)(指網卡到ip層數據報文收發的延遲處理,或者長時間寫日誌也會造成軟件中斷)

2.cpu圖形展示組件:gnuplot

 

內存監控:

1.buffer/cache會佔用物理內存,當系統需要的時候,通過drop cache可以釋放內存。

2.舉例說明:本來free -m(物理內存剩餘150)、drop cache(執行內核同步和drop內核調用後)、sync(釋放cache/buffers內存後執行,防止數據丟失)、free -m(重新檢查物理內存剩餘值,會增加buffers和cached的內存值之和)

3.公式:

物理內存總數mem_total=men_used+mem_free。

實際使用的物理內存數-buffers(內核緩存的內存量)/cache(緩衝交換區總量)=used-buffers-cache

實際可用的物理內存數+buffers/cache=free+buffers+cache

交換分區對應的內存總數swap_total=swap_used(使用的交換區總量)+swap_free(空閒的交換區總量)

 

進程監控:

1.top展示的是進程信息,可用ps檢查實際線程級信息。

2.字段說明:

PID:進程號

user:進程所有者的用戶名;

PR:優先級;

NI:nice值,負值表示高優先級,正值表示低優先級;

VIRT:進程使用的虛擬內存總量,單位KB,VIRT=SWAP+RES

RES:進程使用的、未被換出的物理內存大小,單位KB,RES=CODE+DATA

SHR:共享內存大小,單位kb;

%CPU:上次更新到現在的CPU時間佔用百分比。

%MEM:進程使用的物理內存百分比;

TIME+:進程使用的CPU時間總計,單位1/100秒。

COMMAND:命令名/命令行。

【top技巧]

top+enter+H:進入top配置頁面

top+enter+d:進入間隔刷新配置,輸入間隔秒數,可開始刷新。

top+enter+f+A+d:刪除A-PID列,新增UID列;

top+enter+1:切換單顆CPU信息和平均CPU信息。

top -b:批處理模式;需要在文件中保存,並輸出時必帶參數,否則會打印亂碼)

top -c:命令/程序名 觸發

top -d:設置延遲間隔;系統默認爲3秒,舉例:top -d 5,改爲每五秒刷新一次結果

top -n:設置迭代數量;退出前監控的具體次數,舉例:top -n 3,監控3次數據後退出。

top -p:監控特定的PID

top -u或-U:用戶名或者UID

舉例:top -b -d 1 -n 3 >top.log,表示重定向日誌打印到文本中。(必須加-b,否則會顯示亂碼)

 

 

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