ASP.NET 的性能计数器
更新:2007 年 11 月
ASP.NET 支持两组性能计数器:系统和应用程序。系统性能计数器在 Windows 性能监视器中作为**“ASP.NET”性能计数器对象公开。应用程序性能计数器作为“ASP.NET 应用程序”**性能对象公开。
说明: |
---|
与每个性能计数器关联的值每 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 使用率)
说明:
如果不管客户端负载如何,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 应用程序的信息。
说明: |
---|
“ASP.NET”性能对象中的“State Server Sessions”计数器与“ASP.NET 应用程序”性能对象中的“Sessions”计数器之间存在着重大的差异,前者仅应用于运行状态服务器的服务器计算机,后者仅应用于进程中发生的用户会话。 |
Application Restarts(应用程序重新启动的次数)
Web 服务器的生存期中应用程序重新启动的次数。每次引发一个 Application_OnEnd 事件时,应用程序重新启动次数都会增加 1 次。重新启动应用程序的原因可能是:对 Web.config 文件做出了更改、对存储在应用程序的 Bin 目录中的程序集做出了更改,或者由于 ASP.NET 网页中发生了大量更改而必须重新编译应用程序。此计数器的意外增长可能意味着问题正导致您的 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(会话 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 应用程序的每秒启动的事务数。