在测试运行过程中,应该监视测试客户端的性能计数器和所有 Web 服务器。Application Center Test 在测试运行中自动监视 HTTP 性能统计信息,但性能计数器必须在测试运行之前明确进行配置。
性能计数器数据用于确定测试客户端或 Web 服务器到达其 CPU 最大使用率的时间。如果 Web 应用程序的性能瓶颈并非服务器 CPU,则使用性能计数器是确定瓶颈位置的最佳方式。
有些计数器应该在所有测试中都使用(在下表中以粗体显示),而另一些计数器仅在查找性能问题的不明原因时才使用。
ACT 客户端的性能计数器
对象 | 性能计数器 | 说明 |
---|---|---|
Processor | % Processor Time/_Total | 测试客户端的处理器使用情况 |
Memory | Available Bytes | 测试客户端的可用内存量。 |
Network Interface | Bytes Total/sec | 进出测试客户端的网络流量。 |
Windows 2000 和 IIS 5 的性能计数器
注意,下列是 Microsoft Windows 2000、IIS 5 和 Microsoft SQL Server 7.0 使用的计数器。其他版本使用的计数器可能不同。
在 Web 服务器上记录性能计数器数据可以帮助了解哪部分 Web 应用程序导致了性能降低。
对象 | 计数器 | 说明 |
---|---|---|
Active Server Pages | Memory Allocated | 当 前由 Active Server Pages 分配的总内存量。将该数字与 Memory:Available Bytes 和 Memory:Committed Bytes 进行比较可确定 ASP 使用的内存百分比。如果测试过程中比率超过 50%,表示某个服务器端对象中存在内存泄漏。 |
Active Server Pages | Request Errors/Sec | 每秒的错误数,包括连接错误、编译错误和运行时错误。如果该数字始终大于 0,则测试脚本、服务器配置或 ASP 脚本存在问题。 |
Active Server Pages | Requests Queued | 该计数器应保持接近 0。超过 IIS 队列长度会出现“服务器太忙”错误。 |
Active Server Pages | Requests Rejected | 如果该数字经常大于 0,表示测试负载过重或服务器没有充足的资源。 |
Active Server Pages | Requests/Sec | 每秒的 ASP 请求数。 |
Internet Information Services Global | File Cache Flushes and File Cache Hits | 通 过比较这些计数器可以查看缓存命中与缓存清理的比率。从缓存删除文件时将发生刷新。这些全局计数器提供了从缓存中刷新对象的比率。刷新太慢会浪费内存。该 值可通过调整 ObjectCacheTTL、MemCacheSize 和 MaxCacheFileSize 注册表设置来进行修改。有关详细信息,请参阅 Windows 2000 Resource Kit。 |
Internet Information Services Global | File Cache Hits % | 显示缓存命中数与总缓存请求数的比率。对于具有静态页面的站点,该值大约为 80%。 |
Memory | Available Bytes | 可用的剩余物理内存量。IIS 基本占用 2.5 MB,每个附加连接将在此基础上占用 10 KB 左右。 |
Memory | Cache Bytes | 显示用于静态文件的缓存大小。默认设置为可用内存的 50% 左右,但它会随可用内存的减少而减少,从而降低系统性能。 |
Memory | Page Faults/sec | 这 是由 CPU 处理的错误页面的总比率。Page Faults/sec 不区分软硬页面错误,但能够计算这些错误。Memory: pages Input/sec 是读取磁盘用于解决硬页面错误的页面数。而 Memory: Page Reads/sec 是读取磁盘用于解决硬页面错误的次数。将这些值与 Page Faults/sec 值进行比较可得到一个比率。如果 Page Reads/Sec 比率持续保持为 5,表示可能内存不足。 |
Memory | Pages/sec | 如果服务器没有足够的内存处理其工作负荷,此数值将一直很高。 |
Memory | Pool Paged Bytes and Pool Nonpaged Bytes | 池容纳由应用程序和操作系统创建并使用的对象。如果池被填满,则可能发生内存泄漏。 |
Network Interface | Bytes Total/sec | 将该值与总可用带宽进行比较便能清楚地看到潜在的网络瓶颈。一般要求 bytes/sec 保持在总可用带宽的 50% 以下。 |
Object | Threads | 线程是执行处理器指令的基本可执行实体。如果该数值一直持续上升,请打开 Process:Thread Count 计数器并查看所有线程是由哪个实例创建的。 |
PhysicalDisk | % Disk time | 显 示磁盘进行读/写活动所花费的时间百分比。如果计数器值很高而处理器和网络带宽并不饱和,则可能是磁盘瓶颈。在记录该计数器之前,请在 Windows 2000 的命令行窗口中运行 diskperf -yD。若数值持续超过 80%,则可能是内存泄漏。请确保为多磁盘计算机添加了该计数器的 0 到 x 个实例。 |
PhysicalDisk | Disk Queue Length | 显示磁盘中未完成的请求数量。如果队列长度始终大于 3,则表示磁盘、内存或 SQL 服务器配置有问题。 |
Process | Private Bytes - _Total | 显示所有实例已经分配但无法与其他进程共享的当前字节数。请确保选择了列表中的 _Total 实例。选择任何其他实例可能会耗尽内存。 |
Process | Private Bytes (inetinfo instance) | Private Bytes (inetinfo) 是 HTTP/ASP 服务已分配但无法与其他进程共享的当前字节数。如果该数值始终很大且不断增加,则可能是服务器端对象发生泄漏。请与 Process: Private Bytes (_Total) 进行比较。 |
Process | Thread Count (inetinfo instance) | Web 服务器进程创建的线程数。 |
Processor | % Processor Time (_Total instance) | 这是查看处理器饱和状况的最佳计数器。显示所有 CPU 的线程处理时间。如果一个或多个处理器的该数值持续超过 90%,则表示此测试的负载对于目前的硬件过于沉重。为多处理器服务器添加该计数器的 0 到 x 个实例。 |
Processor | Interrupts/sec | 如果处理器使用率超过 90% 且 % Interrupt Time 大于 15%,则处理器可能负荷过重,并发生中断。 |
Server | Bytes Total/sec | 显示网络活动。 |
System | Processor Queue Length | 显示在由 Web 服务器所有处理器共享的队列中等待执行的线程数。处理器瓶颈会导致该值持续大于 2。 |
System 和 Thread | Context Switches/sec、Context Switches/sec: dllhost (thread # instance) 和 Thread: Context Switches/sec: inetinfo (thread # instance) | 这些计数器从总体上显示系统所发生的高成本上下文切换数,尤其是在 IIS 5.0 中。 |
Thread: | % Processor Time: InetInfo => Thread # | 显示 InetInfo 进程的各线程所使用的处理器时间。 |
Thread: | Context Switches/sec: InetInfo => Thread # | IIS 服务的线程占用和释放处理器的次数。 |
Web Service | Bytes Total/sec | 显示 Web 服务器发送和接收的总字节数。 |
Web Service | Current Anonymous Users | 在未经身份验证的应力测试过程中显示与服务的当前连接数。 |
Web Service | Current Non-Anonymous Users | 当前连接到 HTTP 服务器的已身份验证的用户数。 |
Web Service | Not Found Errors | 显示返回的 404 响应代码的数量。 |
其他性能计数器
如果 Web 应用程序使用 Microsoft SQL Server 或依赖任何其他应用程序来生成响应,则还需监视此程序的性能计数器。
对象 | 计数器 | 说明 |
---|---|---|
SQL Server:General Statistics | Logins/sec | 这是每秒登录到 SQL Server 的计数。 |
SQLServer:Cache Manager | Cache Hit Ratio (all instances) | 显示在高速缓存中找到数据的命中率。如果数值持续小于 85%,则表示内存有问题。 |
SQLServer:General Statistics | User Connections | 显示当前 SQL 用户数。与 Active Server Pages:Requests/Sec 计数���进行比较,可帮助了解脚本对 SQL Server 的影响程度。如果差别过大,则表示测试脚本不能有效地对 SQL Server 进行应力测试。 |
SQL Server:Databases | Transactions/sec | 已开始的总事务数。 |
SQLServer:Locks | Lock Waits/sec | 显示在当前进程完成之前强制其他进程等待的每秒锁定请求的数量。如果该值始终大于 0,则表示事务有问题。 |