Processor/% Processor Time
閥值:處理器的閥值一般設爲85%。
含義:這個計數器是處理器活動的主要指標。高數值並不一定是壞事,但是如果其他處理器相關的計數器(比如% Privileged Time 或者 Processor Queue Length)線性增加的話,高CPU使用率就值得調查了。
Processor/% Privileged Time
閥值:如果數值持續大於75%就表示存在瓶頸。
含義:這個計數器表示一個線程在特權模式下所使用的時間比例。當你的程序調用操作系統的方法(比如文件操作,網絡I/O或者分配內存),這些操作系統的方法是在特權模式下運行的。
Processor/% Interrupt Time
閥值:取決於處理器
含義:這個計數器表示處理器接收處理硬件中斷所使用的時間比例。這個值間接指出產生中斷的硬件設備活動,比如網絡變化。這個計數器顯著增加的話表示硬件可能存在問題。
System/Processor Queue Length
閥值:平均值持續大於2那麼表示CPU存在瓶頸
含義:如果就緒的任務超過處理能力線程就會被放進隊列。處理器隊列是就緒但是未能被處理器執行的線程的集合,這是因爲另外一個線程正在執行狀態。持續或者反覆發生2個以上的隊列則明確的表示存在處理器瓶頸。你也能通過減少併發取得更大的吞吐量。
你可以結合Processor/% Processor Time來決定增加CPU的話你的程序是否能夠受益。即使在多處理器的電腦上,對於CPU時間也是單隊列。因此,在多處理器電腦上,Processor Queue Length (PQL)的值除以用來處理負載的CPU個數。
如果CPU非常忙(90%以上的使用率),PQL的平均值也持續大於2/CPU, 這是應該存在CPU瓶頸而且能夠從更多的CPU中受益。或者,你可以減少線程的數量以及增加應用程序層的隊列。這會引起少量的Context Switching,但是少許的Context Switching對於減少CPU負載是有好處的。PQL大於2但是CPU使用率卻不高的的常見原因是對CPU時間的請求隨機到達而且線程卻從處理器申請到不對稱的CPU時間。這意味着處理器並不是瓶頸,而你的線程邏輯是需要改進的。
System/Context Switches/sec
閥值:按照通常的規律,context switching速率小於5000/秒/CPU是不需要擔心的。如果Context Switching速率達到15000/秒/CPU的話就是一個制約因素了。
含義:當一個高優先級的線程取代一個正在運行的低優先級線程,或者高優先級線程阻塞的時候就會發生Context Switching。大量的Context Switching可以發生在許多線程擁有相同的優先級的情況下,這通常表示有太多的線程競爭CPU,如果你沒有看到太高的處理器使用率而且發現Context Switch非常低,那麼表示線程被阻塞。
//////////Post script////////////
性能計數器解釋
如果Process\Private Bytes計數器和Process\Working Set計數器的值持續升高
同時Memory\Availablebytes計數器的值卻持續降低的話
說明很有可能是存在內存泄漏
windows 自帶的Performance Monitor,控制面版->管理工具->性能
檢測內存泄漏,我們一般可以監視Process對象的Handle
Count,Virutal Bytes
和Working Set三個Counter。Handle Count記錄了進程當前打開的HANDLE的個數,監視這個Counter有助於我們發現程序是否有Handle泄漏;Virtual
Bytes記錄了該進程當前在虛地址空間上使用的虛擬內存的大小,NT的內存分配採用了兩步走的方法,首先,在虛地址空間上保留一段空間,這時操作系統並沒有分配物理內存,只是保留了一段地址。然後,再提交這段空間,這時操作系統纔會分配物理內存。所以,Virtual
Bytes一般總大於程序的Working Set。監視Virutal Bytes可以幫助我們發現一些系統底層的問題;
Working Set記錄了操作系統爲進程已提交的內存的總量,這個值和程序申請的內存總量存在密切的關係,如果程序存在內存的泄漏這個值會持續增加,但是Virtual Bytes卻是跳躍式增加的。
性能對象 |
計數器 |
描述 |
Processor使用 |
%Processor Time(所有實例) |
指處理器執行非閒置線程時間的百分比。這個計數器設計成用來作爲處理器活動的主要指示器。它通過在每個範例間隔中衡 量處理器用於執行閒置處理線程的時間,並且用 100% 減去該值得出。(每 臺處理器有一個閒置線程,該線程在沒有其它線程可以運行時消耗周 期)。可將其視爲範例間隔用於做有用工作的百分比。這個計數器顯 示在範例間隔時所看到的忙時平均值。這個值是用 100% 減去該服務不活 動的時間計算出來的。 |
Proccesor瓶頸 |
Interrupts/sec |
指處理器每秒鐘接收並維護的硬件中斷的平均值。它不包括 DPC,DPC 將單獨計算。這個值是產生中斷的設備(如:系統時鐘、鼠標、磁盤驅動器、數據交流線路、網絡街面卡和其它附件設備)的活動的間接指示器,這些設備通常在完成了一項任務或需要注意時中斷處理器。正常的線程操作在中斷時懸停。大多數的系統時鐘每隔 10 毫秒中斷處理器一次,形成了間隔活動的後臺。這個計數值顯示用上兩個實例中觀察到的值之間的差除於實例間隔的持續時間所得的值。 |
System/Processor Queue Length(所有實例) |
是指處理列隊中的線程數。即使在有多個處理器 的計算機上處理器時間也會有一個單列隊。不象磁盤計數器,這個計數器僅 計數就緒的線程,而不計數運行中的線程。如果處理器列隊中總是有兩個以上的線程 通常表示處理器堵塞。這個計數器僅顯示上一次觀察的值;而不是一個平 均值。 |
|
System/Context Switches/sec |
指計算機上的所有處理器全都從一個線程轉換到另一個線程的綜合速率。當正在運行的線程自動放棄處理器時出現上下文轉換,由一個有更高優先就緒的線程佔先或在用戶模式和特權(內核)模式之間轉換以使用執行或分系統服務。它是在計算機上的所有處理器上運行的所有線程的Thread: Context Switches/sec 的總數並且用轉換數量衡量。在系統和線程對象上有上下文轉換計數器。這個計數值顯示在上一次兩個實例中觀察到的值除於實例間隔的持續時間所得的值的差異。 |
|
Process (進程) |
Private Bytes |
指這個處理不能與其它處理共享的、已分配的當前 字節數。 |
Virtual Bytes |
指處理使用的虛擬地址空間的以字節數顯示的當前大小。 使用虛擬地址空間不一定是指對磁盤或主內存頁的相應的使用。虛 擬空間是有限,如果使用過多,可能會限制處理加載數據 庫的能力。 |
|
Working Set |
指這個處理的 Working Set 中的當前字節數。 Working Set 是在處理中被線程最近觸到的那個內存頁集。如果 計算機上的可用內存處於閾值以上,即使頁不在使用中,也會留在一 個處理的 Working Set中。當可用內存降到閾值以下,將從 Working Set 中刪除頁。如果需要頁時,它會在離開主內存前軟故障返回 到 Working Set 中。 |
|
Handle Count |
由這個處理現在打開的句柄總數。這個數字是在這個處理中每個線程當前打開的句柄的總數。 |
|
Objects |
Threads |
線程指在數據收集時在計算機中線程的數目。請注意這是 一個即時計算而不是一個時間間隔的平均值。一個線程爲一個基本 的可執行實體,該實體在處理器中執行指令。 |
Memory使用 |
Available Bytes |
是計算機上可用於運行處理的有效物理內存的字節數量。是用零、 空閒和備用內存表上的空間總值計算的。空閒內存指可以使用內存;零內存指爲了防 止以後的處理看到以前處理使用的數據而在很多頁內存中充滿了零的內存。備用內 存是指從處理的工作集(它的物理內存)移到磁盤的,但是仍舊可以調用的內存。這個計數器只顯示上一次觀察到的值;它不是一個平均值。 |
Cache Bytes |
是 System Cache Resident Bytes 的總數。System Driver Resident Bytes、System Code Resident Bytes、以及 Pool Paged Resident Bytes 計數器。該計數器只顯示最後一次觀察的值,它不是一個平均值。 |
|
Memory瓶頸或溢出 |
Pages/sec |
是指爲解析硬頁錯誤從磁盤讀取或寫入磁盤的頁數。(當處理程序請求 不在本身工作集或物理內存其它地方中的代碼或數據,而必須要從磁盤上檢索時就會出現硬頁錯誤)。這個計數器設計成可以顯示導致系統範圍延緩類型錯誤的主要指示器。它是 Memory: Pages Input/sec 和 Memory: Pages Output/sec 的 總和。是用頁數計算的,以便在不用做轉換的情況下就可以同其它頁計數如: Memory: Page Faults/sec 做比較,這個值包括爲滿足錯誤而在文件系統緩存(通常由應用程 序請求)的非緩存映射內存文件中檢索的頁。這個計數器顯示用上兩個實例中觀察到的值 之間的差除於實例間隔的持續時間所得的值。 |
Page Reads/sec |
是指爲解析硬頁錯誤而讀取磁盤的次數。(當處理請求的硬 頁錯誤不在工作集和物理內存其它地方中的代碼或數據,而必須從磁盤上檢索時 就會出現硬頁錯誤)。這個計數器設計成可以顯示導致系統範圍延緩 錯誤的主要指示器。這個包括要滿足錯誤而在文件系統緩存(通常由應用程 序請求)的非緩存映射內存文件終檢索的頁。這個計數器顯示用上兩個實例中 觀察到的值之間的差除於實例間隔的持續時間所得的值。 |
|
Transition Faults/sec |
是指由在修改頁列表、備份頁表或在頁錯誤時寫入 磁盤上造成的頁錯誤數量。這些頁是在沒有額外磁盤活動的情況下恢復的。傳輸 錯誤是在不計算每次操作時出錯的頁數的情況下計算錯誤數量。這個計數 器顯示用上兩個實例中觀察到的值之間的差除於實例間隔的持續時間所得的值。 |
|
Pool Paged Bytes |
指在分頁池中的字節數,分頁池是系統內存(操作系 統使用的物理內存)中可供對象(在不處於使用時可以寫入磁盤的)使 用的一個區域。Memory: Pool Paged Bytes 的計數方式與 Process: Pool Paged Bytes 的方式不同,因此可能不等於 Process: Pool Paged Bytes: _Total 。這個 計數器僅顯示上一次觀察的值;而不是一個平均值。 |
|
Pool Nonpaged Bytes |
指在非分頁池中的字節數,非分頁池是指系統內存(操作系統使用的物理內存)中可供對象(指那些在不處於使用時不可以寫入磁盤上 而且只要分派過就必須保留在物理內存中的對象)使用的一個區域。Memory: Pool Nonpaged Bytes 的計數方式與 Process: Pool Nonpaged Bytes 的計數方式 不同,因此可能不等於Pool Nonpaged Bytes: _Total。 這個計數器僅顯示上一次觀察的值;而不是一個平均值。 |
|
PhysicalDisk 的使用 |
%Disk Time |
指所選磁盤驅動器忙於爲讀或寫入請求提供服務所用的時間 的百分比。 請謹慎對待 % Disk Time 計數器。因爲該計數器的 _Total 實例不能精確反映多磁盤系統的利用率,因此使用 % Idle Time 計數器也非常重要。 |
% Idle Time |
彙報在實例間隔時磁盤閒置時間的百分比。 |
|
Disk Reads/sec |
指在此盤上讀取操作的速率。 |
|
Disk Writes/sec |
指在此盤上寫入操作的速率。 |
|
PhysicalDisk的瓶頸 |
Avg.Disk Queue Length(所有實例) |
指讀取和寫入請求(爲所選磁盤在實例間隔中列隊的)的平均數。 |
System |
File Data Operations/ sec |
指在計算機的所有邏輯磁盤上讀取和寫入操作的綜合速度。這是系統的逆轉率:每秒鐘的文件控制操作。這個總值顯示了上兩個實例中觀察到的值的差異除於實例間隔的時間。 |
Processor Queue Length |
是指處理列隊中的線程數。即使在有多個處理器 的計算機上處理器時間也會有一個單列隊。不象磁盤計數器,這個計數器僅 計數就緒的線程,而不計數運行中的線程。如果處理器列隊中總是有兩個以上的線程 通常表示處理器堵塞。這個計數器僅顯示上一次觀察的值;而不是一個平 均值。 |
|
網絡使用 |
Network Segment\ % Net Utilization |
|
網絡吞吐量 |
|
協議傳輸計數器(隨網絡協議而改變);對於 TCP/IP:Network Interface\ Bytes total/sec |
Cache |
|
|
Paging File |
|
|
Server |
|
|
Thread |
|
|