CPU DPC 時間百分比

Microsoft.Windows.Server.6.2.Processor.PercentDPCTime (UnitMonitor)

監視 DPC 時間百分比

Knowledge Base article:

摘要

處理器的 % PDC Time (Processor Information\% DPC Time) 已超過閾值。整體系統效能可能會明顯下降,進而造成作業系統與應用程式效能不良。

% DPC Time 是處理器花費在接收與處理延遲程序呼叫 (DPC) 的時間百分比。DPC 是一種插斷,它的執行優先順序比標準插斷低。若 % DPC Time 持續偏高,表示處理器可能發生瓶頸,或發生可能致使整體系統效能顯著下降的應用程式或硬體相關問題。

原因

較高的 % DPC Time 值可能是由下列一或多個原因造成:

解決方式

若要檢視處理器相關效能計數器的最近歷程,可使用下列檢視:

啟動 Processor 效能檢視

若要判斷 DPC 速率過高的根本原因,請執行下列程序。

觀察花費在處理插斷與 DPC 的處理器時間比例。其方法是使用系統監視器即時監視下列計數器:

將 % Interrupt Time 及 % DPC Time 計數器的值,與每個處理器執行個體的 Processor Information\% Processor Time 進行比較。

若處理器執行個體的處理器時間百分比持續高於 85%,且有 15% 以上的時間花費在處理插斷和/或 DPC 上,表示處理器可能就是效能瓶頸的根源。您可以升級電腦,或在電腦上新增額外的處理器來解決此瓶頸。

若處理器的 % Processor Time 持續低於 85%,且有 15% 以上的時間花費在處理插斷和/或 DPC 上,表示效能問題可能是由應用程式或硬體相關問題所引起。

若根本原因在於硬體裝置,系統管理員將會發現 % DPC Time 可能會在短時間內大幅增加。安裝新硬體或升級驅動程式時通常會發生此問題。若系統管理員確定問題就在硬體/裝置驅動程式問題,可與廠商共商解決此問題。

若您管理的多處理器系統未對稱分配插斷,通常可以新增網路介面卡,讓每個處理器使用一個介面卡,以改善處理器工作負載的分配。一般而言,僅在您要提高系統的輸送量時,才需要新增介面卡。與任何額外的硬體一樣,網路介面卡本身也會產生一些負荷。但其中如有任何處理器幾乎一直都在使用中 (亦即 Processor Information:% Processor Time = 100),而且有一半以上的時間都花費在服務 DPC 上 (若 Processor Information:% DPC Time > 50),新增介面卡或可改善系統效能,但前提是可用網路頻寬尚未達到飽和。

如果根本原因在於應用程式,您將會發現應用程式發出的呼叫需要較長時間才能完成,因此造成 DPC 被封鎖。在這段時間內,DPC 將會被封鎖並放入佇列中。若要確定根本原因在於哪個應用程式,您必須執行進階效能追蹤與診斷以判定造成效能問題的確切應用程式。

Element properties:

TargetMicrosoft.Windows.Server.6.2.Processor
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledFalse
Instance NameProcessor Information
Counter Name\% DPC Time
Frequency120
Alert GenerateFalse
Alert Auto ResolveTrue
Monitor TypeSystem.Performance.ConsecutiveSamplesThreshold
RemotableTrue
AccessibilityPublic
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.Windows.Server.6.2.Processor.PercentDPCTime" Accessibility="Public" Enabled="false" Target="WindowsServer!Microsoft.Windows.Server.6.2.Processor" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="SystemPerf!System.Performance.ConsecutiveSamplesThreshold" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<OperationalStates>
<OperationalState ID="OverThreshold" MonitorTypeStateID="ConditionTrue" HealthState="Error"/>
<OperationalState ID="UnderThreshold" MonitorTypeStateID="ConditionFalse" HealthState="Success"/>
</OperationalStates>
<Configuration>
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<CounterName>% DPC Time</CounterName>
<ObjectName>Processor Information</ObjectName>
<InstanceName>$Target/Property[Type="WindowsServer!Microsoft.Windows.Server.Processor"]/PerfmonInstance$</InstanceName>
<Frequency>120</Frequency>
<Threshold>15</Threshold>
<Direction>greaterequal</Direction>
<NumSamples>5</NumSamples>
</Configuration>
</UnitMonitor>