概述:在性能测试中性能监视器是非常强大的工具,本文主要简述了几个关键的计数器和相关的阈值。
很多的性能计数器在性能调优中是非常重要的,由于性能计数器太多,很多人不知道选择那些计数器。
在ASP.NET应用程序中,以下这几个计数器是最基本的:
接下去将会补充说明这些计数器背后代表的意义以及该计数器需要注意的阈值,当然还会补充其他一些相关的性能计数器。
以下是对一些比较重要的性能计数器的介绍。
#Exceps thrown / sec:
每秒扔出的托管异常数量。值得注意的是Response.Redirect, Server.Transfer和Response.End将会触发ThreadAbortException, 这个将会严重影响站点的性能。所以用Response.Redirect(url, false)或者用一个静态的HTML来重定向页面。
阈值是5% RPS
Current AppDomains:
当前加载的 AppDomain数量
Current Assemblies:
当前加载的程序集数量
Bytes in Loader Heap:
所有AppDomains的类型加载器加载的比特数。这个数值必须是稳定的,否者就是AppDomain加载的程序集太多了。
# Bytes in alll Heaps:
所有托管对象占据的比特数。强烈建议用WINDBG.EXE和SOS.DLL。
# Gen 0 Collections:
0代的对象被回收的数量。仍存活的对象将到达Gen 1.
# Gen 1 Collections:
1代中对象被回收的数量。仍存活的对象将到达Gen 2.
这个阈值是Gen 0 的1/10
# Gen 2 Collections:
2代是最高的,这个阈值是Gen 1 的 1/10
% Time in GC:
最新的一次GC花费的时间百分比。这个平均值低于5%是一个健康的值。
Application Restarts:
应用程序重启的次数。这个建议值理想状态下应该是0.
Applications Running:
当前运行的应用程序数量。
Requests Current:
当前ASP.NET ISAPI 当前处理的请求数量。当请求数量超过requestQueueLimit, ASP.NET将会拒绝请求。
Request Execution Time:
执行最后一个request花费的毫秒数。
Requests Queued:
当前请求正在排队的数量。
Requests Rejected:
请求被拒绝的数量。
下面几个计数器是发现Request被拒绝原因.
Cache Total Entries
Cache Total Hit Ratio
Cache API Entries
Compilations Total
Errors During Compilation
Error During Execution
Error Unhandled During Execution
Requests Total/sec:
当前执行的请求数量。当HttpRuntime开始处理请求的时候,该计数器加1,当HttpRuntime结束处理Request时,该计数器减1.
Requests Not Found.
Requests Timed Out.
Request Total:
当应用程序启动以后,总计收到的请求数量。
Requests/Sec
每秒执行的请求数。建议使用 “Web Service\ISAPI Extension Request/Sec”, 因为该计数器不会受应用程序重启的影响。
% Processor Time.
Handle Count.
Thread Count.
Virtual Bytes.
% Processor Time:
所有线程使用当前处理器的时间百分比
阈值是70%
Available Mbytes:
可用的物理内存数量。
Context Switches/sec:
处理器切换线程上下文的比例。
Current Connections.
Total Method Requests/sec:
可以和ASP.NET Applications 和 Web Services中的Request / sec做比较静态页面和aspnet_isapi.dll处理请求数量。
ISAPI Extension Requests/sec.
该计数器包含所有ISAPI extensions, 不仅仅是aspnet_isapi.dll.
在应用程序go live之前,压力测试和相关的计数器将减少你将来的headache.