更詳細的請參考 IIS 協助文檔
ASP.NET 的效能計數器
ASP.NET 支援兩組效能計數器:系統和應用程式。前者在 ASP.NET 效能計數器對象中的 PerfMon 中公開;後者在 ASP.NET Applications 效能物件中公開。ASP.NET 效能物件中的 State Server Sessions 計數器(僅適用於在其中運行狀態伺服器的伺服器電腦)和 ASP.NET Applications 效能物件中的 Sessions 計數器(僅適用於進程中發生的使用者會話)之間存在很大的差異。
注意 每 400 毫秒更新一次與每個效能計數器關聯的值。
在監視 ASP.NET Web 應用程式的效能時,應該始終跟蹤下表中列出的效能計數器。
效能物件 |
效能計數器 |
ASP.NET |
Application Restarts |
ASP.NET |
Requests Queued |
ASP.NET |
Worker Process Restarts |
ASP.NET Applications |
Errors Total |
ASP.NET Applications |
Requests/Sec |
Processor |
% CPU Utilization |
% CPU Utilization 計數器監視 Web 服務器電腦上的 CPU 使用方式。無論用戶端負載如何,CPU 使用率很低或者無法達到 CPU 最大使用率就意味著 Web 應用程式中存在資源或鎖定競爭。
此外,在確定 Web 應用程式效能問題時,下表中列出的效能計數器是非常有用的。
效能物件 |
效能計數器 |
ASP.NET Applications |
Pipeline Instance Count |
.NET CLR Exceptions |
# of Exceps Thrown |
System |
Context Switches/sec |
# of Exceps Thrown 計數器顯示應用程式中引發的異常數量,因為它們可能會對效能造成不利影響。但是,某些代碼路徑必須依賴異常才能正常工作。例如,HttpResponse.Redirect 方法始終引發一個無法捕獲的異常 ThreadAbortException。因此,使用 Errors Total 計數器跟蹤引發的異常數量以查看異常是否在應用程式上建置錯誤更有用處。
Context Switches/sec 計數器測量 Web 服務器電腦中所有 CPU 切換線程內容相關的速率。如果此計數器的數值較大,則表明鎖定競爭很激烈,或者線程在使用者和核心模式之間頻繁切換。可能還需要使用採樣分析器和其他工具進行進一步的分析。
以下列表詳細介紹了 ASP.NET 和 ASP.NET Applications 效能物件中的計數器。
ASP.NET 系統效能計數器
ASP.NET 支援以下 ASP.NET 系統效能計數器。它們彙集 Web 服務器電腦上所有 ASP.NET 應用程式的資訊,或者它們通常應用於運行相同應用程式的 ASP.NET 伺服器的系統。它們可能包含 Web 場和 Web 園。
-
Application Restarts
-
在 Web 服務器的生存期內應用程式已重新啟動的次數。每發生一次
Application_OnEnd 事件,應用程式重新啟動次數就會增加一次。可能由於以下原因而出現應用程式重新啟動:更改 Web.config 檔案,更改應用程式 \Bin 目錄中儲存的程式集,或者對 Web 表單頁更改過多。此計數器意外增加可能意味著,未知問題將導致 Web 應用程式關閉。在此類情況下,應該儘早調查原因。
注意 每次重新啟動 Internet 資訊服務 (IIS) 主機時,就會重設該值。
-
Application Running
-
伺服器電腦上啟動並執行應用程式的數量。
-
Requests Disconnected
-
由於通訊故障而斷開的請求數量。
-
Requests Queued
-
在隊列中等待服務的請求數。當此數值隨用戶端負載線性增加時,則 Web 服務器電腦已達到它所能處理的並發請求的上限。此計數器的預設最大值為 5,000。可以在電腦的 Machine.config 檔案中更改此設定。
-
Requests Rejected
-
由於處理請求的伺服器資源不足而未執行的請求總數。此計數器表示返回 503 HTTP 狀態碼(表示伺服器太忙)的請求數量。
-
Request Wait Time
-
隊列中的最近請求等待處理的亳秒數。
-
Session State Server Connections Total
-
儲存進程外工作階段狀態資料的電腦的工作階段狀態串連總數。
-
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 和
State Server Sessions Timed Out 的累積值。該計數器只用於運行狀態伺服器服務 (
aspnet_state) 的電腦上。
-
Worker Process Restarts
-
在伺服器電腦上已重新啟動背景工作處理序的次數。如果背景工作處理序意外失敗或者有意回收,則可以重新啟動該背景工作處理序。當此計數器出現意外增加時,應該儘早調查原因。
-
Worker Process Running
-
伺服器電腦上啟動並執行背景工作處理序的數量。
ASP.NET Application 效能計數器
ASP.NET 支援以下應用程式效能計數器,可以使用這些計數器來監視單個 ASP.NET 應用程式執行個體的效能。這些計數器均有一個唯一執行個體 __Total__,該執行個體合計 Web 服務器上所有應用程式的計數器(與本主題第一節中描述的全域計數器類似)。__Total__ 執行個體始終可用。當伺服器上沒有應用程式時,這些計數器將顯示零。
-
Anonymous Requests
-
使用匿名驗證的請求數。
-
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 在內部使用的緩衝,又包括通過公開的 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 的檔案或程式碼後置源檔案時,就會發生這種情況。
注意 在對應用程式的所有部分提出請求時,此數值開始逐步達到峰值。但是,在進行編譯時間,將產生的位元據儲存到磁碟(在其中重新使用該資料,直到其源檔案發生變化時為止)中。這意味著,即使進程重新啟動,計數器仍可保持為零(非活躍),直到修改或重新部署應用程式時為止。
-
Debugging Requests
-
在啟用調試時發生的請求數。
-
Errors During Preprocessing
-
在分析期間發生的錯誤數。不包括編譯和執行階段錯誤。
-
Errors During Compilation
-
在動態編譯期間發生的錯誤數。不包括剖析器和執行階段錯誤。
-
Errors During Execution
-
在執行 HTTP 要求期間發生的錯誤總數。不包括剖析器和編譯錯誤。
-
Errors Unhandled During Execution
-
在執行 HTTP 要求期間發生的未處理錯誤的總數。
注意 未處理的錯誤是指任何未捕獲的運行時異常,它轉換頁面上的使用者代碼並輸入 ASP.NET 內部錯誤處理邏輯。在以下情況下,此規則出現例外情況:
- 啟用了自訂錯誤和/或定義了錯誤頁面。
- 在使用者代碼中定義了 Page_Error 事件並且清除了該錯誤(使用 HttpServerUtility.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 計數器。
注意 在拒絕請求(無法完成,因為拒絕是由 IIS 而不是由進程模型完成的)時,等價的 ASP 計數器也將增加。
-
Requests Not Found
-
由於未找到資源而失敗的請求數(狀態碼 404、414)。
-
Requests Not Authorized
-
由於無授權而失敗的請求數(狀態碼 401)。
-
Requests Succeeded
-
已成功執行的請求數(狀態碼 200)。
-
Requests Timed Out
-
已逾時的請求數(狀態碼 500)。
-
Requests Total
-
服務啟動後的請求總數。
-
Requests/Sec
-
每秒執行的請求數。它表示應用程式的當前輸送量。在恒定負載下,此數值應處於特定的範圍內(不包含其他的伺服器工作,如記憶體回收、緩衝清理線程和外部伺服器工具等)。
-
Sessions Active
-
當前活動會話的數量。該計數器只受記憶體中工作階段狀態的支援。
-
Sessions Abandoned
-
已明確放棄的會話數。該計數器只受記憶體中工作階段狀態的支援。
-
Sessions Timed Out
-
逾時的會話數量。該計數器只受記憶體中工作階段狀態的支援。
-
Sessions Total
-
逾時的會話數量。該計數器只受記憶體中工作階段狀態的支援。
-
Transactions Aborted
-
中止的事務數。
-
Transactions Committed
-
提交的事務數。
-
Transactions Pending
-
進行中的事務數。
-
Transactions Total
-
服務啟動後的事務總數。
-
Transactions/Sec
-
每秒啟動的事務數。