ASP.NET 支持两组性能计数器:系统和应用程序。系统性能计数器在 Windows 性能监视器中作为“ASP.NET”性能计数器对象公开。应用程序性能计数器作为“ASP.NET 应用程序”性能对象公开。
注意
与每个性能计数器关联的值每 400 毫秒更新一次。创建监视应用程序时,请务必考虑这一时间间隔,以使您的代码不会使用过时的计数器值。有关更多信息,请参见Using System Monitoring Components。
有关系统和应用程序性能计数器的其他信息,请参见How to: Create Performance Counter Categories、Category and Counter Management和How to: Create Custom Performance Counters。
监视 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(引发的异常数)
系统
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 应用程序循环。在这种情况下,应尽快进行调查。
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 扩展名的文件(即代码隐藏源文件)时会发生编译。
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”计数器的值。