更新:2007 年 11 月
ASP.NET 支持两组性能计数器:系统和应用程序。系统性能计数器在 Windows 性能监视器中作为**“ASP.NET”性能计数器对象公开。应用程序性能计数器作为“ASP.NET 应用程序”**性能对象公开。
| .gif) 说明: | 
|---|
| 与每个性能计数器关联的值每 400 毫秒更新一次。创建监视应用程序时,请务必考虑这一时间间隔,以使您的代码不会使用过时的计数器值。有关更多信息,请参见使用系统监视组件。 | 
有关系统和应用程序性能计数器的其他信息,请参见如何:创建性能计数器类别、类别和计数器管理和如何:创建自定义性能计数器。
监视 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 使用率) .gif) 说明: 
如果不管客户端负载如何,CPU 使用均低或者无法最大化 CPU 使用,则表明 Web 应用程序中存在锁或资源争用。
 | 
另外,下面的性能计数器对确定 Web 应用程序的性能问题也可能有价值。
| 性能对象 | 性能计数器 | 
|---|---|
| ASP.NET 应用程序 | Pipeline Instance Count(管线实例计数) | 
| .NET CLR 异常 | # of Exceps Thrown(引发的异常数) | 
| System | Context Switches/sec(每秒上下文切换数) | 
**“# of Exceps Thrown”计数器显示应用程序中引发的异常数,因为这些可能有性能方面的暗示。但是,某些代码路径依赖异常才能正常使用。例如,Response 对象上的 Redirect 方法引发 ThreadAbortException 异常,而该异常无法被捕获。因此,使用“Errors Total”**计数器跟踪该值(以查看异常在应用程序上是否产生了错误)可能很有用。
Context Switches/sec 计数器测量 Web 服务器计算机中的所有 CPU 切换线程上下文的速率。此计数器的高数值通常说明存在较高的锁争用,或者线程在用户模式与内核模式之间有大量切换。如果遇到这种情况,应该使用采样分析器和其他工具进行进一步的研究。
ASP.NET 系统性能计数器
ASP.NET 支持下表中所列的 ASP.NET 系统性能计数器。这些计数器聚合来自 Web 服务器计算机上的所有 ASP.NET 应用程序的信息。
| .gif) 说明: | 
|---|
| “ASP.NET”性能对象中的“State Server Sessions”计数器与“ASP.NET 应用程序”性能对象中的“Sessions”计数器之间存在着重大的差异,前者仅应用于运行状态服务器的服务器计算机,后者仅应用于进程中发生的用户会话。 | 
- Application Restarts(应用程序重新启动的次数) 
 Web 服务器的生存期中应用程序重新启动的次数。每次引发一个 Application_OnEnd 事件时,应用程序重新启动次数都会增加 1 次。重新启动应用程序的原因可能是:对 Web.config 文件做出了更改、对存储在应用程序的 Bin 目录中的程序集做出了更改,或者由于 ASP.NET 网页中发生了大量更改而必须重新编译应用程序。此计数器的意外增长可能意味着问题正导致您的 Web 应用程序循环。在这种情况下,应尽快进行调查。.gif) 说明: 说明:- 每次重新启动 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(会话 SQL Server 连接总数) 
 存储会话状态数据的 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(状态服务器会话总数) 
 进程的生存期中创建的会话数。该计数器是以下会话数的总数:“活动的状态服务器会话数”、“放弃的状态服务器会话数”和“超时的状态服务器会话数”。该计数器仅在正运行状态服务器服务 (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 页框架 NET 使用缓存的情况,也包括通过缓存 API 使用应用程序缓存的情况。
- Cache Total Turnover Rate(缓存总流通率) 
 每秒对缓存的添加数和移除数,它有助于确定缓存的使用效率。如果流通率较高,则表示未能有效地使用缓存。
- Cache API Entries(缓存 API 项数) 
 应用程序缓存中项的总数。
- Cache API Hits(缓存 API 命中数) 
 当只通过外部缓存 API 访问时,缓存中命中的总数。该计数器不跟踪通过 ASP.NET 页框架使用缓存的情况。
- Cache API Misses(缓存 API 未命中数) 
 当通过外部缓存 API 访问时,缓存未能命中的请求总数。该计数器不跟踪通过 ASP.NET 页框架使用缓存的情况。
- Cache API Hit Ratio(缓存 API 命中率) 
 当通过外部缓存 API 访问时,缓存命中数与未命中数的比率。该计数器不跟踪通过 ASP.NET 页框架使用缓存的情况。
- Cache API Turnover Rate(缓存 API 流通率) 
 当通过外部 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 事件,清除了错误(使用 ClearError 方法)或执行了重定向。 
 
- Errors Unhandled During Execution/Sec(执行过程中每秒未处理的错误数) 
 执行 HTTP 请求过程中每秒未处理的异常的数目。
- Errors Total(错误总数) 
 执行 HTTP 请求期间发生的错误总数(包括任何分析器错误、编译错误或运行时错误)。此计数器为 Errors During Compilation、Errors During Preprocessing 和 Errors During Execution 计数器的总和。正常运行的 Web 服务器不应发生错误。如果 ASP.NET Web 应用程序中发生错误,它们可能会歪曲任何吞吐量结果,因为错误恢复的代码路径与原来的完全不一样。在性能测试前应调查并修复应用程序中的所有 Bug。
- 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(活动的会话数) 
 当前活动的会话数。该计数器仅在内存中会话状态下受支持。
- Sessions Abandoned(放弃的会话数) 
 已显式放弃的会话数。该计数器仅在内存中会话状态下受支持。
- Sessions Timed Out(超时的会话数) 
 超时的会话数。该计数器仅在内存中会话状态下受支持。
- Sessions Total(会话总数) 
 会话总数。该计数器仅在内存中会话状态下受支持。
- Transactions Aborted(中止的事务数) 
 所有活动 ASP.NET 应用程序的已取消的事务数。
- Transactions Committed(提交的事务数) 
 所有活动 ASP.NET 应用程序的已提交的事务数。
- Transactions Pending(挂起的事务数) 
 所有活动 ASP.NET 应用程序的正在进行的事务数。
- Transactions Total(事务总数) 
 所有活动 ASP.NET 应用程序的事务总数。
- Transactions/Sec(每秒事务数) 
 所有活动 ASP.NET 应用程序的每秒启动的事务数。