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 的文件或代碼隱藏源文件時,就會發生這種情況。
注意 在對應用程序的所有部分提出請求時,此數值開始逐步達到峰值。但是,在進行編譯時,將產生的二進制數據保存到磁盤(在其中重新使用該數據,直到其源文件發生變化時為止)中。這意味著,即使進程重新啟動,計數器仍可保持為零(非活躍),直到修改或重新部署應用程序時為止。