ASP.NET 的效能計數器
ASP.NET 支援兩個效能計數器群組:系統和應用程式。系統效能計數器會在 Windows 效能監視器中公開 (Expose) 成為 [ASP.NET] 效能計數器物件。應用程式效能計數器則會公開成為 [ASP.NET 應用程式] 效能物件。
![]() |
---|
與每個效能計數器相關的值每 400 毫秒會進行更新。建立監視應用程式時,請確定將這個時間間隔列入考慮,這樣您的程式碼便不會使用過時的計數器值。如需詳細資訊,請參閱使用系統監視元件。 |
如需系統和應用程式效能計數器的其他資訊,請參閱 HOW TO:建立效能計數器分類、分類和計數器管理和 HOW TO:建立自訂效能計數器。
監視 ASP.NET Web 應用程式的效能時,您可以追蹤列在下表中的效能計數器。
效能物件 | 效能計數器 |
---|---|
ASP.NET |
Application Restarts |
ASP.NET |
Requests Queued |
ASP.NET |
Worker Process Restarts |
ASP.NET 應用程式 |
Errors Total |
ASP.NET 應用程式 |
Requests/Sec |
處理器 |
% CPU Utilization ![]()
無論用戶端負載多少,都呈低 CPU 使用率或無法最大化 CPU 使用率時,可能表示 Web 應用程式中有鎖定或資源爭用的狀況。
|
此外,下列效能計數器對於判斷 Web 應用程式的效能問題頗有價值。
效能物件 | 效能計數器 |
---|---|
ASP.NET 應用程式 |
Pipeline Instance Count |
.NET CLR 例外狀況 |
# of Exceps Thrown |
系統 |
Context Switches/sec |
[# of Exceps Thrown] 計數器會顯示應用程式中擲回的例外狀況數目,因為這些例外狀況可能會對效能造成影響。不過,有些程式碼路徑需依賴例外狀況才能正常運作。例如,Response 物件上的 Redirect 方法會擲回無法攔截的 ThreadAbortException 例外狀況。因此,在追蹤這個值和 [Errors Total] 計數器,以查看例外狀況是否會在應用程式上產生錯誤時,可能有所幫助。
[Context Switches/sec] 計數器測量執行緒內容由 Web 伺服器電腦上所有 CPU 所交換的速率。如果這個計數器的數字很大,通常表示鎖定中有劇烈的爭用,或是使用者和核心 (Kernel) 模式之間由執行緒進行了許多交換。如果經歷此狀況,您應該使用取樣分析工具 (Profiler) 和其他工具做進一步的調查。
ASP.NET 系統效能計數器
ASP.NET 會支援下表所列的 ASP.NET 系統效能計數器。這些計數器會彙總 (Aggregate) Web 伺服器電腦上所有 ASP.NET 應用程式中的資訊。
![]() |
---|
在 [ASP.NET] 效能物件中發現的 [State Server Sessions] 計數器之間有顯著的不同,它們只適用於執行狀態伺服器的伺服器電腦,而在 [ASP.NET 應用程式] 效能物件中發現的 [Sessions] 計數器,則只適用在同處理序 (In-Process) 中發生的使用者工作階段。 |
Application Restarts
應用程式在 Web 伺服器的存留期 (Lifetime) 期間已經重新啟動的次數。每次引發 Application_OnEnd 事件時,就會遞增應用程式重新啟動。應用程式重新啟動可能會由於變更 Web.config 檔、變更存放在應用程式 Bin 目錄中的組件,或者因大幅變更 ASP.NET Web 網頁而必須重新編譯應用程式所致。如果這個計數器中的數字未如預期增加,可能表示發生問題而導致您的 Web 應用程式重新啟動。在這類情況中,您應該儘速展開調查。注意事項
這個值會在每次重新啟動網際網路資訊服務 (IIS) 主機時重設為零。
- Application Running
正在伺服器電腦上同時執行的應用程式數目。
- Requests Disconnected
因通訊失敗而造成中斷連接的要求數目。
- Requests Queued
在佇列中等待服務的要求數目。當這個數字隨著用戶端負載增加而開始直線遞增時,Web 伺服器電腦即已達到它能夠處理的並行要求限制。這個計數器的預設最大值是 5,000。您可以在 Machine.config 檔案中變更這個設定。
- Requests Rejected
由於沒有充足的伺服器資源處理,因而未執行的要求總數。這個計數器表示傳回 503 HTTP 狀態碼 (表示伺服器太過忙碌) 的要求數目。
- Request Wait Time
最近發生的要求在佇列中等候處理的毫秒數。
- Session State Server Connections Total
到儲存跨處理序 (Out-Of-Process) 工作階段狀態資料之電腦的工作階段狀態連接總數。如需詳細資訊,請參閱工作階段狀態模式。
- Session SQL Server Connections Total
到儲存工作階段狀態資料之 Microsoft SQL Server 資料庫的工作階段狀態連接總數。如需詳細資訊,請參閱工作階段狀態模式。
- State Server Sessions Abandoned
已經明確放棄的使用者工作階段的數目。這些是被特定使用者動作結束的工作階段,例如關閉瀏覽器或巡覽至另一個網站。這個計數器僅於狀態伺服器服務 (aspnet_state) 執行所在的電腦上可用。
- State Server Sessions Active
目前作用中使用者工作階段的數目。這個計數器僅於狀態伺服器服務 (aspnet_state) 執行所在的電腦上可用。
- State Server Sessions Timed Out
已經透過使用者的不動作而變成非現用使用者工作階段的數目。這個計數器僅於狀態伺服器服務 (aspnet_state) 執行所在的電腦上可用。
- State Server Sessions Total
在處理序存留期期間建立的工作階段數目。這個計數器是 [State Server Sessions Active]、[State Server Sessions Abandoned] 和 [tate Server Sessions Timed Out] 的總計值。這個計數器僅於狀態伺服器服務 (aspnet_state) 執行所在的電腦上可用。
- Worker Process Restarts
背景工作處理序在伺服器電腦上已經重新啟動的次數。背景工作處理序如果未預期地失敗或是故意回收時即可重新啟動。如果此計數器未預期地增加,您應該盡快進行調查。
- Worker Process Running
正在伺服器電腦上執行的背景工作處理序的數目。
ASP.NET 應用程式效能計數器
ASP.NET 會支援下表所列的應用程式效能計數器。這些計數器可讓您監視 ASP.NET 應用程式之單一執行個體的效能。名為 [__Total__] 的唯一執行個體可用於這些計數器。這個執行個體會彙總 Web 伺服器上所有應用程式的計數器 (類似於本主題之前所描述的全域計數器)。__Total__ 執行個體永遠可供使用。沒有應用程式正在伺服器上執行時,計數器將顯示零。
- Anonymous Requests
使用匿名驗證 (Authentication) 的要求數。
- Anonymous Requests/Sec
使用匿名驗證的每秒要求數。
- Cache Total Entries
快取區中的項目總數。這個計數器包括 ASP.NET 網頁架構的快取使用量和透過快取 API 的應用程式快取使用量。
- Cache Total Hits
來自快取區的命中總數。這個計數器包括 ASP.NET 網頁架構的快取使用量和透過快取 API 的應用程式快取使用量。
- Cache Total Misses
每個應用程式的失敗快取要求數。這個計數器包括 ASP.NET 網頁架構的快取使用量和透過快取 API 的應用程式快取使用量。
- Cache Total Hit Ratio
快取區的命中數對遺漏數的比例。這個計數器包括 ASP.NET 網頁架構 NET 的快取使用量,以及透過快取 API 的應用程式快取使用量。
- Cache Total Turnover Rate
快取每秒的新增和移除數量,在判斷使用快取的效率上很有幫助。如果重組率很高,則快取區的使用便不是很有效率。
- Cache API Entries
應用程式快取中的項目總數。
- Cache API Hits
只透過外部快取 API 存取快取區時,來自快取區的命中總數。這個計數器不會追蹤 ASP.NET 網頁架構的快取使用量。
- Cache API Misses
透過外部快取 API 來存取快取區時,對快取區的失敗要求總數。這個計數器不會追蹤 ASP.NET 網頁架構的快取使用量。
- Cache API Hit Ratio
透過外部快取 API 來存取時,快取區命中數對遺漏數的比例。這個計數器不會追蹤 ASP.NET 網頁架構的快取使用量。
- Cache API Turnover Rate
透過外部 API (ASP.NET 網頁架構的使用除外) 使用時,快取每秒的新增和移除數量。這對於幫助確定快取區的有效使用方面很有用處。如果重組率很高,則快取區的使用便不是很有效率。
Compilations Total
在目前 Web 伺服器處理序存留期期間已經發生的編譯總數。當具有 .aspx、.asmx、.ascx 或 .ashx 副檔名的檔案,或程式碼後置 (Code-Behind) 的原始程式檔 (Source File) 在伺服器上動態編譯時,就會發生編譯。當對應用程式的所有部分進行要求時,這個數目將會在一開始爬升到尖峰值。然而,一旦發生編譯,結果產生的編譯輸出會儲存到磁碟,並在其中重複使用直到其原始程式檔變更為止。這表示即使在處理序重新啟動的事件中,計數器可以保持為零 (非現用),直到應用程式被修改或重新部署為止。
- Debugging Requests
發生在啟用偵錯時的要求數。
- Errors During Preprocessing
在剖析過程中發生的錯誤數目,但編譯和執行階段錯誤除外。
- Errors During Compilation
在動態編譯期間發生的錯誤數目,但剖析器 (Parser) 和執行階段錯誤除外。
- Errors During Execution
在 HTTP 要求執行期間發生的錯誤總數,但剖析器和編譯錯誤除外。
Errors Unhandled During Execution
發生在 HTTP 要求執行期間未處理的錯誤總數。未處理的錯誤是任何在使用者程式碼中未截獲的執行階段例外狀況,並且會進入 ASP.NET 內部錯誤處理邏輯。這個規則 (Rule) 的例外狀況發生在:已啟用自訂錯誤、已定義錯誤網頁,或兩者同時。
Page_Error 事件會定義於使用者程式碼中,而錯誤不是被清除 (使用 ClearError 方法),就是已經執行重新導向。
- Errors Unhandled During Execution/Sec
發生在 HTTP 要求執行期間之每秒未處理的例外狀況數。
- Errors Total
在 HTTP 要求執行期間發生的錯誤總數,包括剖析器、編譯或執行階段錯誤。這個計數器是 Errors During Compilation、Errors During Preprocessing 和 Errors During Execution 計數器的總和。運作良好的 Web 伺服器不應該產生錯誤。如果您的 ASP.NET Web 應用程式發生錯誤,它們會因為復原錯誤的極不同程式碼路徑,而造成偏差的效能結果。進行效能測試前請先調查和修正應用程式中的錯誤。
- Errors Total/Sec
在 HTTP 要求執行期間發生的每秒錯誤數目,包括剖析器、編譯或執行階段錯誤。
- Output Cache Entries
輸出快取中的項目總數。
- Output Cache Hits
輸出快取所服務的要求總數。
- Output Cache Misses
每個應用程式的失敗輸出快取要求數。
- Output Cache Hit Ratio
輸出快取所服務的總要求百分比。
- Output Cache Turnover Rate
每秒對輸出快取區加入和移除的數目。如果重組率很高,則快取區的使用便不是很有效率。
- Pipeline Instance Count
指定 ASP.NET 應用程式的作用中要求管線執行個體數。由於管線執行個體中只能執行一個執行緒,因此這個數字提供特定應用程式可處理之並行要求的最大數。在大部分的情況中,在負載下時這個數字最好比較低,表示妥善使用 CPU。
- Request Bytes In Total
所有要求的大小總計 (以位元組為單位)。
- Request Bytes Out Total
傳送至用戶端的回應大小總計 (以位元組為單位)。這不包括 HTTP 回應標頭。
- Requests Executing
目前執行中的要求數。
Requests Failed
已失敗要求的總數。任何大於或等於 400 的狀態碼都將會遞增這個計數器。造成 401 狀態碼的要求將會遞增這個計數器和 [Requests Not Authorized] 計數器。造成 404 或 414 狀態碼的要求將會遞增這個計數器和 [Requests Not Found] 計數器。造成 500 狀態碼的要求將會遞增這個計數器和 [Requests Timed Out] 計數器。
- Requests Not Found
因為找不到資源而失敗的要求數 (狀態碼 404 或 414)。
- Requests Not Authorized
因沒有授權而失敗 (狀態碼 401) 的要求數。
- Requests Succeeded
成功執行 (狀態碼 200) 的要求數。
- Requests Timed Out
逾時 (狀態碼 500) 的要求數。
- Requests Total
自服務啟動以來的要求總數。
- Requests/Sec
每秒執行的要求數。這數字代表應用程式目前的效能。在不變負載下,這個數字應該維持在特定範圍內,限制其他伺服器工作 (如記憶體回收、快取區清除執行緒、外部伺服器工具等)。
- Sessions Active
目前作用中的工作階段數目。只在 In-Memory 工作階段狀態下支援這個計數器。
- Sessions Abandoned
已經明確放棄的工作階段數目。只在 In-Memory 工作階段狀態下支援這個計數器。
- Sessions Timed Out
已逾時的工作階段數目。只在 In-Memory 工作階段狀態下支援這個計數器。
- Sessions Total
工作階段總數。只在 In-Memory 工作階段狀態下支援這個計數器。
- Transactions Aborted
對所有使用中 ASP.NET 應用程式取消的交易數。
- Transactions Committed
對所有使用中 ASP.NET 應用程式認可的交易數。
- Transactions Pending
所有使用中 ASP.NET 應用程式正在處理的交易數。
- Transactions Total
所有使用中 ASP.NET 應用程式的交易總數。
- Transactions/Sec
對所有使用中 ASP.NET 應用程式啟動的每秒交易數。
請參閱
概念
開發高效能 ASP.NET 應用程式
最佳化 ASP.NET 中的效能
監視 ASP.NET 應用程式效能