测量同一服务器上特定 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 负载的主要内容,如果未能解决你的问题,请参考以下文章