ASP.NET 的性能计数器

更新:2007 年 11 月

ASP.NET 支持两组性能计数器:系统和应用程序。系统性能计数器在 Windows 性能监视器中作为**“ASP.NET”性能计数器对象公开。应用程序性能计数器作为“ASP.NET 应用程序”**性能对象公开。

fxk122b4.alert_note(zh-cn,VS.90).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 使用率)

fxk122b4.alert_note(zh-cn,VS.90).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 应用程序的信息。

fxk122b4.alert_note(zh-cn,VS.90).gif说明:

“ASP.NET”性能对象中的“State Server Sessions”计数器与“ASP.NET 应用程序”性能对象中的“Sessions”计数器之间存在着重大的差异,前者仅应用于运行状态服务器的服务器计算机,后者仅应用于进程中发生的用户会话。

  • Application Restarts(应用程序重新启动的次数)
    Web 服务器的生存期中应用程序重新启动的次数。每次引发一个 Application_OnEnd 事件时,应用程序重新启动次数都会增加 1 次。重新启动应用程序的原因可能是:对 Web.config 文件做出了更改、对存储在应用程序的 Bin 目录中的程序集做出了更改,或者由于 ASP.NET 网页中发生了大量更改而必须重新编译应用程序。此计数器的意外增长可能意味着问题正导致您的 Web 应用程序循环。在这种情况下,应尽快进行调查。

    fxk122b4.alert_note(zh-cn,VS.90).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 CompilationErrors During PreprocessingErrors 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 应用程序的每秒启动的事务数。

请参见

概念

性能概述

从 ASP 迁移到 ASP.NET 时的性能问题

监视 ASP.NET 应用程序性能

其他资源

ASP.NET 缓存