1. 程式人生 > >效能測試常見的指標(一)

效能測試常見的指標(一)

 

效能測試最基本要考慮以下幾點:

1、時間特性,主要指的是軟體產品的事物響應時間(使用者發出請求到收到應答的這段時間)

2、資源利用率,包括:cpu、記憶體、網路、硬碟、虛擬記憶體(如Java虛擬機器)

3、伺服器可靠性,指伺服器能在相對高負載情況下持續的執行

4、可配置優化性,指伺服器配置優化、業務邏輯優化、程式碼優化等

 

效能指標:

1、響應時間

響應時間是最能反應伺服器效能的指標之一,也是使用者最關心的業務體驗。比如登入某個商城網站時,只消耗1s鍾。在進行效能測試時,是通過對事務響應時間(Transaction Response Time)來分析伺服器的響應速度。

 

(一般響應時間在3s內,使用者會感覺比較滿意。在3s~8s之間使用者勉強能接受,大於8s使用者就可能無法接受,從而重新整理頁面或者離開,僅供參考)

2、吞吐量

吞吐量表示單位時間內能夠完成的事務數量,因此也被稱為每秒事務數(Transaction Per Second),計算方式是完成的事務數除以時間。

3、伺服器資源佔用

伺服器資源佔是指在負載情況下,系統的資源利用率。資源佔用越低,說明系統越優秀。例如,cpu的佔用率、記憶體使用率、查詢Cache命令率、磁碟I/O讀寫速率等。

 

CPU常用計數器:

計數器

計數器分析

%Processor Time

如果該值持續超過95%,表明瓶頸是cpu

Processor Queue Length

指待處理佇列中的執行緒數,如果在處理器佇列中總是有兩個以上的執行緒則通常表示處理器堵塞,處理器瓶頸會導致該值持續大於2。此外,跟蹤計算機的伺服器工作佇列將顯示當前長度的Server Work Queues\Queue Length,佇列長度持續大於4則表示可能出現處理器擁塞。

%User Time

表示消耗CPU的資料庫操作,如排序、執行aggregate functions

等。如果該值很高,可考慮增加索引,儘量使用簡單的表連線、水平分割大表格等方法來降低該值。

%Privileged Time

此計數器是特定時間的值,指(CPU核心時間)在特權模式下處理執行緒執行程式碼所花時間的百分比,如果該引數的值和“Physical Disk”引數值一直很高,則表明I/O有問題。可考慮更換磁碟系統。

%DPC Time

網絡卡CPU的佔用率,該值越低越好。如果這個值大於50%並且Processor%Processor Time非常高,說明提供的網路已經受CPU影響無法飽和工作

 

 

 

記憶體常用計數器:

計數器

計數器分析

Available Mbytes

可用實體記憶體數。如果Available Mbytes的值很小,則說明計算機上總的記憶體可能不足,或某程式沒有釋放記憶體。

Page/sec

表明由於硬體頁面錯誤而從磁碟取出的頁面數,或由於頁面錯誤而從磁碟取出的頁面數,或由於頁面錯誤而寫入磁碟以釋放記憶體空間的頁面數。一般如果Page/sec持續高於幾百,那麼應該進一步研究交換活動,有可能需要增加記憶體,以減少換頁的需求。Page/sec的值很大,不一定表明記憶體有問題,而可能是執行使用記憶體對映檔案的程式所致。

Page read/sec

指頁的硬故障,是Page/sec的子集,為了解析對記憶體的引用,必須讀取頁檔案的次數。該數值越低越好,大於5時表示磁碟讀而不是緩衝讀。

Page Faults/sec

指每秒鐘軟體頁面失效的數目,而Page/sec只表明資料不能在指定記憶體中立即使用。

Cache Bytes

檔案系統快取(File System Cache),預設情況下為50%的可用實體記憶體,如果懷疑有記憶體洩露,請監視Memory \Available BytesProcess\working set Process\Handle Count,如果懷疑是記憶體的程序Process\Private Bytes\Process\Working set Process\Handle Count,如果懷疑是核心模式程序導致了洩露,則還應該監視Memory\pool Nonpaged BytesMemory\pool Nonpaged AllocsProcessprocess_name\Pool Nonpaged Bytes

Pages/sec

每秒鐘檢索的頁數,該數字應少於每秒1

Committed Bytes

以位元組表示的確認虛擬記憶體,確認記憶體磁碟頁面檔案上保留了空間的實體記憶體。每個物理磁碟上可以有一個或一個以上的頁面檔案。這個計數器只顯示上一回觀察到的值;它不是一個平均值。其實就是指有多少虛擬記憶體正在被使用,虛擬記憶體是佔用硬碟空間的記憶體,和實體記憶體無關。

 

 

物理磁碟常用計數器:

計數器

計數器分析

%Disk Time

指所選磁碟驅動器為讀或寫入請求提供服務所用時間的百分比。如果三個計數器都比較大,那麼磁碟不是瓶頸。如果只有%Disk Time比較大,另外兩個都比較適中,則硬碟可能會是瓶頸。若數值持續超過80%,則可能的記憶體洩露。

Avg.Disk Queue Length

它指的是當前磁碟的佇列長度。通俗點來解釋就是:計數器反映的磁碟完成請求所用的時間,較高的值表明磁碟控制器由於失敗而不斷重試該磁碟。這些故障會增加平均磁碟傳送時間。

Average Disk Read /

Write Queue Length

指讀取(寫入)請求(佇列)的平均數

Disk Reads(Writes)/sec

物理磁碟上每秒磁碟讀/寫的次數,兩者相加,應小於磁碟裝置最大容量

Average Disk sec/Read

指以秒計算的在此盤上讀取資料所需的平均時間

Average Disk sec/Transfer

指以秒計算的在此盤上寫入資料所需的平均時間。一般來說,該值小於15ms最佳,15~30ms為良好,30~60ms為可以接受,超過60ms則需要考慮更換磁碟或磁碟的RAID方式了

Bytes Total/sec

傳送和接收位元組的速率,包括幀字元在內。判斷網路連線速度是否是瓶頸,可以用該計數器的值和目前網路的頻寬進行比較。

 

 

執行緒常用計數器:

計數器

計數器分析

Context Switch/sec

如果決定要增加執行緒位元組池的大小,應該同時監視例項化inetinfo dllhost 程序這兩個計數器。增加執行緒可能會增加上下文切換次數,這樣效能不會上升,反而會下降。如果多個例項的上、下文切換值非常高,就應該減小執行緒位元組池。

 

程序常用計數器:

計數器

計數器分析

Process/ %Processor Time

被處理器消耗的處理器時間數量。如果伺服器專用於SQL Server,則可接受的最大上限是80%~85%

Page Faults/sec

將程序產生的頁故障與系統產生的相比較,以判斷這個程序對系統頁故障產生的影響

Working set

處理執行緒最近使用的記憶體頁,反映了每個程序使用的記憶體的數量,如果伺服器有足夠的空閒記憶體,頁就會被留在記憶體中,當自由記憶體少於一個特定的閾值時,頁就會被消除記憶體。

Process/Private Bytes

指程序所分配的無法與其他程序共享的當前位元組數量,該計數器主要用來判斷程序在效能測試過程中有無記憶體洩露。我們可以重點監控inetinfo程序的Private Bytes,如果在效能測試過程中,該程序Private Bytes計數器的值不斷增加,或是效能測試停止後一段時間,該程序的Private Bytes仍然持續較高水平,則說明應用存在記憶體洩露。

 

服務緩衝常用計數器:

計數器

計數器分析

File Cache Hits

檔案快取命中的具體值

File Cache Hits %

全部快取請求中,快取命中次數所佔的比例,反映了IIS的檔案快取設定的工作情況。對於一個大部分是靜態網組成的網站,該值應該保持在80%左右。

File Cache Flushes

自伺服器啟動之後檔案快取重新整理的次數,如果重新整理太慢,會浪費記憶體;如果重新整理太快,快取中的物件就會被頻繁的丟棄再重新生成,起不到快取的作用,通過將File Cache Hits除以File Cache Flushes 可以得出快取命中率對快取清空率的比率。通過觀察這兩個值,可以得到一個適當的重新整理值

Connection Refused

該數值越低越好,高數值表明網路介面卡或處理器存在瓶頸。

 

 

網路常用計數器:

計數器

計數器分析

Bytes Total/sec

傳送和接收位元組的速度,包括幀字元在內,判斷網路連線速度是否為瓶頸,可以用該計數器的值和目前網路的頻寬相除,結果應該小於50%

 

Apache常用計數器:

計數器

計數器分析

Apache CPU Usage apache

伺服器CPU的佔用率

Kbytes Sent/sec

伺服器每秒傳送的位元組數

Hits/sec

Apache 服務每秒的點選率

#Busy Workers

Apache 服務佔用率

#Idle Workers

Apache 服務空閒率

 

Mysql 常用計數器:

計數器

計數器分析

Threads_connected

表示當前有多少個客戶連線該Mysql伺服器,連線數是否過多,網路是否存在問題,它是動態變化的。當Threads_connected ==max_connections時,資料庫系統就不能提供更多的連線數了,這時,如果程式還想新建連線執行緒,資料庫系統就會拒絕,如果程式沒做太多的錯誤處理,就會出現報錯資訊。

Threads_running

如果資料庫超負荷了,將會得到一個正在(查詢的語句持續)增長的數值。這個值也可以小於預先設定的值。這個值在很短的時間內超過限定值是沒有問題的,如果超過預設值時且5s內沒有回落,就要同時監視其他的一些值。

Aborted_clients

客戶端被異常中斷的數值(因為連線到Mysql伺服器的客戶端沒有正常地斷開或關閉)。對於一些應用程式是沒有影響的,但對於另一些應用程式可能要跟蹤該值,因此異常中斷連線可能表明一些應用程式有問題

Questions

每秒獲得的查詢數量。也可以是全部查詢的數量,可以根據輸入不同的命令得到你想要的不同的值。

Handler_*

如果想監視底層(low-level)資料庫負載,這些值是值得去跟蹤的。如果Handler_read_rnd_next值與正常值相差懸殊,可能是優化或索引出問題了,Handler_rollback表明事務被回滾的查詢數量。

Opened_tables

指表快取沒有命中的數量。如果該值很大,就需要增加table_cache的數值。

Select_full_join

沒有主鍵(key)聯合(join)的執行,該值可能是零。這是捕獲開發錯誤的好方法,因為這樣的查詢有可能降低系統的效能。

Select_scan

執行全表搜尋查詢的數量,如果發現該值持續增長,說明需要優化,缺乏必要的索引或其他問題。

Select_queries

超過該值(--long-query-time)的查詢數量,或沒有使用索引查詢數量。對於全部查詢會有小的衝突。如果該值增長,則表明系統有效能問題。

Threads_created

該值一般較低。較高的值可能意味著需要增加thread_cache的數值,或遇到了持續增加的連線,表明存在潛在的問題。

Pending normal aio reads

該值是innodb io 請求查詢的大小(size)。如果該值超出了10~20的範圍,可能存在一些瓶頸。

 

 (本篇部分內容,僅供參考)