测量同一服务器上特定 IIS 网站的 CPU 负载

Posted

技术标签:

【中文标题】测量同一服务器上特定 IIS 网站的 CPU 负载【英文标题】:Measuring CPU load for specific IIS websites on same server 【发布时间】:2009-01-14 10:13:43 【问题描述】:

我有一个在 Windows Server 2003 上运行的 IIS 服务器。该服务器托管多个网站。

有时CPU负载会在很长一段时间内达到峰值,导致服务器停止响应或响应延迟。

问题是我们不知道多个网站中的哪一个造成了高负载 - 我尝试在性能监视器中查看可以使用的计数器,但我没有看到任何关于特定 CPU 负载的信息IIS 实例。

这使得很难找到问题的根源。

【问题讨论】:

【参考方案1】:

每个应用程序池都有 w3wp.exe 进程。所以尝试将每个 Web 应用程序设置在不同的应用程序池中。顺便说一句,这始终是一个好习惯。

然后运行following script。

然后您可以通过任务管理器或性能监视器查看哪个 Web 应用程序造成了高 CPU 负载。

【讨论】:

+1。我冒昧地进行了编辑,以免 URL 超出页面的一侧。【参考方案2】:

您是否尝试检查垃圾收集 2 峰值(# Gen 2 Collections)的性能计数器?

CPU 负载非常高的时期通常可以归因于此。

编辑:这个 SO 答案可能有用:What are the best ASP.NET performance counters to monitor?

这篇博文描述了收集和解释 GC 性能计数器:http://blogs.msdn.com/maoni/archive/2004/06/03/148029.aspx

【讨论】:

我现在监控它们,但我如何解释这些数字?应该期待什么? 我假设您正在运行 ASP.NET(可能不是这样?)大的 Gen 2 堆和大量的 Gen 2 集合可能意味着太多的对象被保留在记忆。 什么是大数? :-) 我看到的值范围从 2 到 40,我认为这不是一个大数字。【参考方案3】:

使用 WMI 试试:

获取进程使用情况(W2K3/2K8): "SELECT IDProcess, PercentPrivilegedTime, PercentProcessorTime, PercentUserTime FROM Win32_PerfFormattedData_PerfProc_Process where Name='w3wp'"

要识别您的网站,请使用: "SELECT ProcessId, CommandLine, WorkingSetSize, ThreadCount, PrivatePageCount, PageFileUsage, PageFaults, HandleCount, CreationDate, Caption FROM Win32_Process where Caption='w3wp.exe'"

使用此工具测试 sql:http://code.msdn.microsoft.com/NitoWMI

祝你好运。

【讨论】:

以上是关于测量同一服务器上特定 IIS 网站的 CPU 负载的主要内容,如果未能解决你的问题,请参考以下文章

测量代码段的 Java 执行时间、内存使用和 CPU 负载

PHP网站并发测试

如何测量 MySQL 服务器的当前负载?

用Nginx搭建IIS集群实现负载均衡

IIS服务器与web.config配置优化指南

Windows 上程序的 CPU 使用率测量