.net 性能计数器 - 进程(w3wp)\% 处理器时间

Posted

技术标签:

【中文标题】.net 性能计数器 - 进程(w3wp)\\% 处理器时间【英文标题】:.net performance counter - Process(w3wp)\% Processor Time.net 性能计数器 - 进程(w3wp)\% 处理器时间 【发布时间】:2010-09-14 20:47:38 【问题描述】:

在性能测试中,我发现Process(w3wp)\% Processor Time的值大于100。有些值是

237.1436486
312.5338052
341.2373994
264.4097661
191.6237736

我认为这个值代表 w3wp 进程的 CPU 使用率。我不明白为什么值大于 100%。

【问题讨论】:

【参考方案1】:

如果您有多个核心,它可以超过 100,这是 每个 处理器(核心或虚拟核心)的处理器使用量的总和,因此超过 100 是正常的(100*numberOfCores 是 nax )。

如果您想要总体 CPU 百分比,请使用 Process(w3wp_Total) 版本的计数器,上限为 100。

【讨论】:

嘿,谢谢。有道理,我去找你说的柜台 有这样的计数器吗?除了“Process(w3wp)”之外,我唯一知道的是“Process(_Total)”,这当然是所有进程的总和。就个人而言,我只是在遇到这个问题时做了一个 ("Process(w3wp)\% Processor Time" / Environment.ProcessorCount)。 我没有找到计数器 Process(w3wp_Total) 但我考虑做同样的事情 ("Process(w3wp)\% Processor Time" / Environment.ProcessorCount) 谢谢! 那么如何获取核心数呢?例如,在我的机器上,Environment.ProcessorCount 读数为 2,但性能计数器返回的 CPU 使用率高达 800%。【参考方案2】:

正如 Nick Craver 已经说过的,它是所有处理器(逻辑或物理)的总和。要获得介于 0% 和 100% 之间的值,只需将其除以处理器数量即可(例如 Environment.ProcessorCount,假设您想在 .NET 代码中执行此操作)。

【讨论】:

以上是关于.net 性能计数器 - 进程(w3wp)\% 处理器时间的主要内容,如果未能解决你的问题,请参考以下文章

在 c# 中从 W3wp 获取性能计数器

在性能监视器中连接网站其 w3wp#X 进程

跨应用域回收使用自定义性能计数器

ASP.NET 应用程序中的 Thread.Abort 导致 w3wp.exe 崩溃

压力测试报出503错误---ASP.NET支持大并发的相关配置

在调试模式下启动工作进程(w3wp.exe)是啥意思?