一、常見計數器
1、windows系統計數器
類別 | 計數器名稱 | 計數器描述 |
Memory | Available Mbytes | 可用實體記憶體數 |
Pages/sec | 表明由於硬體頁面錯誤而從磁碟取出的頁面數,或由於頁面錯誤而寫入磁碟以釋放工作集空間的面數 | |
Pages Read/sec | 頁的硬故障,Pages/sec的子集,為了解析對記憶體的引用,必須讀取頁檔案的次數。其閾值為5,數值越低越好,大樹枝表示磁碟讀而不是快取讀 | |
Page Faults/sec | 此值為處理器中的頁面錯誤的計數。當程式引用特定的虛擬記憶體頁,該頁不在其主記憶體的工作集中,將出現頁面錯誤。如果某頁已經位於主記憶體中,或者它正在被共享該頁的其他程式所使用,則頁面錯誤不會導致該頁從磁碟中讀取 | |
Cache Bytes | 檔案系統快取,預設情況下為50%的可用實體記憶體 | |
Process | %Processor Time | 被處理器消耗的處理器時間數量。如果專用於某種特定應用,則可用應用相關程式的%Processor Time進行衡量,此時可接受的上限一般不超過85% |
Page Faults/sec | 將程式產生的頁故障與系統產生的相比較,以判斷該程式對系統頁故障產生的影響 | |
Work Set | 處理執行緒最近使用的記憶體頁,反映每一個程式使用的記憶體頁的數量。如果伺服器有足夠的空閒記憶體,頁就會被留在工作集中,當自由記憶體少於一個特定的閾值,頁就會被清除出工作集 | |
Private Bytes | 此程式所分配的無法與其他程式共享的當前位元組數量。如果系統效能隨著時間而降低,則此計數器可以是記憶體洩露的最佳指示器 | |
Processor | %Processor Time | 如果該值持續超過95%,表明瓶頸是CPU,可以考慮增加一個處理器或換一個更快的處理器 |
%User Time | 非核心操作耗費的CPU時間。一般來說,如果系統中使用了大量的演算法或複雜的計算操作,該值會比較大 | |
%Pricileged Time | CPU核心時間是在特權模式下處理執行緒執行程式碼所花時間的百分比 | |
%DPC Time | CPU消耗在網路處理上的時間,此值越低越好 | |
Physical Disk | %Disk Time | 所選磁碟驅動器忙於為讀或寫入請求提供服務所用時間的百分比 |
Average Disk Queue Length | 讀取和寫入請求(所選磁碟在例項間隔中列隊)的平均數。該全值應不超過磁碟數的1.5~2倍,要提高效能,可增加磁碟。(一個Raid Disk實際有多個磁碟) | |
DiskReads(Writes)/sec | 物理磁碟上每秒磁碟讀、寫的次數,兩者相加應小於磁碟裝置的最大容量 | |
Average Disk sec/Read | 以秒計算的在磁碟上讀取資料所需的平均時間 | |
Average Disk sec/Transfer | 以秒計算的在磁碟上寫入資料所需的平均時間 | |
Network Interface | Bytes Total/sec | 為傳送和接受位元組的速率,包括幀字元在內。判斷網路連線速度是否是瓶頸,可以用該計數器的值和目前的寬頻比較 |
System | %Total Processor Time | 系統上所有處理器都忙於執行非空閒執行緒的平均時間百分比,反映了用於有用作業的時間比率。對單處理器系統來說,該值很容易理解;對於多伺服器系統來說,該值體現了所有處理器的平均繁忙程度 |
File Data Operations/sec | 計算機對檔案系統裝置執行讀取和寫入操作的速率。本計數器的計數不包括檔案控制操作 | |
Processor Queue Length | 執行緒單元中的處理佇列的即時長度。所有處理器都是用單一佇列(執行緒在該佇列中等待處理器進行迴圈)。此長度不包括當前正在執行的執行緒,一般情況下,如果處理器佇列的長度一直超過伺服器上可用處理器的總數量+1,則表示處理器可能堵塞 |
2、IIS應用伺服器計數器
類別 | 計數器名稱 | 計數器描述 |
Processor | %Total Processor Time | 被處理器消耗的處理器時間數量,對於IIS應用伺服器來說,該值一般不應超過85% |
Physical Disk | %Disk Time | 顯示磁碟進行讀/寫活動所花費的時間百分比 |
Memory | Available Bytes | 可用的剩餘實體記憶體量。IIS基本佔用2.5MB,每個附加連線將在此基礎上佔用10KB左右 |
Pool Paged Bytes and Pool Nonpaged Bytes | 緩衝池,由應用程式和作業系統建立並使用的物件。如果池被填滿,可能發生記憶體洩露 | |
Pages/sec | 如果伺服器沒有足夠的記憶體處理其工作負荷,此數值將一直很高 | |
Object | Threads | 執行緒是執行處理器指令的基本可執行實體,如果該值一直持續上升,請開啟Process:Threads Count計數器並檢視所有執行緒是由哪個例項建立的 |
Process | Private Bytes Total | 顯示所有例項已經分配但無法與其他程式共享的當前位元組數 |
1)Active Server Page計數器
重點需要關注超時的請求數、指令碼執行時期的錯誤、佇列中的請求數、請求等待時間、請求總數、失敗的請求總數和送出的總位元組數。
佇列中的請求數和請求等待時間直接反映應用伺服器的處理能力,如果佇列中的請求數數值處於一個比較高的水平,同時請求等待時間是一個比較大的值,則應用伺服器本身是瓶頸,需要解決。指令碼執行時期的錯誤、請求總數、失敗的請求總數和送出的總位元組數都可以與測試工具在測試過程中獲得的吞吐量、請求數等進行對比,從而確定資料的可信度。
2)Web Service計數器
①Bytes Total/Sec:顯示Web伺服器傳送和接收的總位元組數。低數值表明該IIS正在以較低的速度進行資料傳輸;
②Connection Refused:數值越低越好,高數值表明網路介面卡或處理器存在瓶頸;
③Not Found Errors:顯示由於被請求檔案無法找到而無法由伺服器滿足的請求數(http status=404)
3)dotNET計數器(略,檢視官方文件)
3、J2EE應用伺服器計數器
類別 | 計數器名稱 | 計數器描述 |
JVM | Heap Size | JVM堆大小,該計數器的值是一個實時值 |
Heap Free | JVM可用堆大小,該計數器的值是一個實時值 | |
JDBC Connection Pool | Waiting For Connection Current Count | 等待的連線數量,如果該值持續較大,可能需要考慮增加應用伺服器的JDBC連線池大小 |
Connections Total Count | 總的JDBC連線數 | |
Max Capacity | JDBC連線池的總容量。可以通過該計數器和上兩個計數器值的比較,獲得連線池設定是否合理的結論 | |
Active Connections Current Count | 當前活躍的JDBC連線數,分析該值可以知道JDBC連線的利用率是否合理 | |
Execute Queue | Execute Thread Current Idle Count | 空閒的執行緒數量 |
Pending Request Oldest Time | 佇列請求的最久時間。該值可以看到佇列有無明顯的擁塞情況 | |
Serviced Request Total Count | 已處理的請求總數。該值可以用來和效能測試工具測試後得到的單擊數進行對比 | |
Pending Request Current Count | 掛起請求的數量 |
4、資料庫伺服器計數器
類別 | 計數器名稱 | 計數器描述 |
System | Total Processor Time | 資料庫程式佔用的CPU時間。不同的資料庫有不同的名稱,例在Oracle中被稱為cpu used by thisession |
User Connections | 當前使用者連線數。資料庫伺服器一般都有使用者數連擊數的限制,應用不合理時,有可能出現連線數超過限制的情況,導致一些異常的發生 | |
Memory | Cache Hit Ratio | 快取命中率。當該值比較小,而資料庫比較繁忙時,可能需要調整快取的大小 |
Total Server Memory(僅適用於SQL Server) | 程式當前使用的記憶體量。結合其他計數器(ConnectionMemory、Lock Memory等)可以很清楚知道Memory的使用情況 | |
PGA Memory/UGA Memory(僅適用於Oracle) | Oracle資料庫程式的記憶體使用情況 | |
Lock | Average Wait Time | 鎖平均等待時間 |
Lock Requesets/sec | 每秒的鎖請求數 | |
Number of Deadlocks/sec | 每秒產生的死鎖數量,當該值比較大時,需要查詢產生死鎖的原因 | |
I/O | Outstanding Reads(Writes) | 被掛起的物理讀(寫),當該值比較大時,可能是CPU、磁碟I/O產生了瓶頸,可以通過伺服器的CPU和I/O進一步分析原因 |
Page Read/sec | 每秒頁面讀寫的次數 | |
Transactions/sec | 每秒產生的事務數量 |
二、分析方法(針對作業系統)
1、記憶體分析方法
1)檢視Memory\Available Mbytes指標
該值是描述系統可用記憶體的直接指標,在對系統進行作業系統級別的記憶體分析時,首先通過該指標建立一個初步的印象,瞭解系統是否有足夠的記憶體可用。如果值比較小,系統可能出現記憶體方面的問題,需要進一步分析。
PS:在Unix/Linux系統中,對應的指標是Free(KB)。
2)注意Pages/sec、Pages Read/sec和Page Faults/sec的值
作業系統經常會利用磁碟交換的方式提高系統可用的記憶體量或記憶體的使用效率,這三個指標直接反映了作業系統進行磁碟交換的頻度。如果Pages/sec的計數持續高於幾百?很可能會有記憶體方面的問題產生,但值很大不一定表明記憶體有問題,可能是執行使用記憶體對映檔案的程式所致。Pages Faults/sec值表示每秒發生頁面失效的次數,頁面失效次數越多,說明作業系統向記憶體中讀取的次數越多。此時還需要檢視Pages Read/sec,此值閾值為5,如果計數值超過5,則可以判斷存在記憶體方面的問題。
PS:在Unix/Linux系統中,對應的指標是(page)si和(page)so。
3)根據Physical Disk計數器的值分析效能瓶頸
如果Pages Read/sec很低,同時%Disk Time和Average Disk Queue Length的值很高,則可能有磁碟瓶頸。但是如果佇列長度增加的同時Pages Read/sec並未降低,則是由於記憶體不足。
PS:在Unix/Linux系統中,對應的指標是Read(Writes)per sec、Percent of time the disk is busy和Average number of transactions waiting for service。
2、處理器分析方法
1)檢視System\%Total Processor Time效能計數器的計數值
此值體現伺服器整體的處理器利用率。對多處理系統而言,體現的是所有CPU的平均利用率。如果該值持續超過90%,則說明整個系統面臨著處理器方面的瓶頸,可以增加處理器來提高效能。在某些多CPU系統中,該資料本身並不大,但是CPU之間的負載狀態很不均衡,也可以視為系統產生了處理器方面的瓶頸。
2)檢視每個CPU的Processor\%Processor Time、Processor\%User Time和Processor\%Privileged Time
如果Processor\%User Time值較大,可以考慮是否能通過演算法優化等方法優化該值,如果伺服器是資料庫,Processor\%User Time值打的原因很可能是資料庫的排序或是函式操作消耗了過多的CPU時間,此時可以考慮對資料庫系統進行優化。
3)研究系統處理器瓶頸
檢視System\Processor Queue Length計數器的值,當大於CPU總量+1時,說明產生了處理器堵塞,在處理器的%Process Time值很高時一般都伴隨著處理器堵塞。反之則不然,此時必須查詢處理器堵塞的原因。
%DPC Time是另一個需要關注的,該計數值越低越好。在多處理器系統中,如果該值大於50%且Processor\%Processor Time值比較高,則考慮加一個網路卡來提高效能。
3、磁碟I/O分析方法
1)計算每磁碟的I/O數
每磁碟的I/O數可用來與磁碟的I/O能力進行對比,如果經過計算得到的每磁碟的I/O數超過了磁碟標稱的I/O能力,則說明確定存在磁碟的效能瓶頸。
每磁碟的I/O的計算方法 | |
Raid型別 | 計算方法 |
Raid0 | (Reads+Writes)/Number of Disks |
Raid1 | (Read+2*Writes)/2 |
Raid5 | (Read+4*Writes)/Number of Disks |
Raid10 | (Read+2*Writes)/Number of Disks |
2)與Processor\Privileged Time組合進行分析
如果在Physical Disk計數器中,只有%Disk Time值較大,其他值適中,則硬碟可能會是瓶頸。若幾個值都比較大,且數值持續超過80%,則可能是記憶體洩露。
3)根據Disk sec/Transfer進行分析
一般來說,定義Transfer數值小於15ms為優秀,15~30ms之間為良好,30~60ms之間可以接受,超過60ms則需要考慮更換硬碟或者硬碟的Raid方式了。
4、程式分析方法
1)檢視程式的%Processor Time值
該值反映程式消耗的處理器時間。不同程式進行對比,可以輕易看出具體哪個程式在測試過程中消耗了最多的處理器時間,從而據此針對應用進行優化。
2)檢視每個程式產生的頁面失效
Process\Page Failures/sec與Memory\Page Failures/sec的比值,判斷哪個程式產生了最多的頁面失效,該程式要麼是需要大量記憶體的程式,要麼是非常活躍的程式,可以對其進行重點分析。
3)瞭解程式的Process\Private Bytes
該值指程式所分配的無法與其他程式共享的當前位元組數量,主要用來判斷程式在效能測試過程中有無記憶體洩露。例如一個在IIS上的Web應用,如果測試過程中,程式的Private Bytes計數值不斷增加或是測試停止一段時間後,該值仍然持續在高水平,則說明應用存在記憶體洩露。
PS:在Unix/Linux系統中,對應的指標是Resident Size。
5、網路分析方法
一般的公司都有專門的網路管理人員,網路分析是門技術活,此處僅描述Network Interface\Bytes Total/sec的值。Network Interface\Bytes Total/sec為傳送和接收位元組的速率(包括幀字元),可以通過該計數器的值和目前網路的頻寬進行比較來判斷網路連線速度是否是瓶頸。
PS:在Unix/Linux系統中,可以參照Unix/Linux系統提供的snmp服務介面進行網路分析。