【问题标题】:w3wp.exe exceeding max threadsw3wp.exe 超过最大线程数
【发布时间】:2012-02-17 08:39:01
【问题描述】:

我们需要处理 10000 个并发用户。

让我解释一下系统。机器有两个处理器。 machine.config 中的 ProcessModel 设置为 autoconfig = true。这样maxWorkerThreads = 20。

当我用 30 个用户 运行我的案例并观察 CPU 使用率时,它最大为 100。w3wp.exe 上的线程数超过 70。因为我的默认值为 20 * 2 ( CPU) = 40。

一旦 cpu 达到 100%,大部分事务都会失败或通话最长响应时间

现在的问题 1. 我如何将 30 个线程分配给同一个工作进程? 2.这里如何降低CPU使用率?

【问题讨论】:

  • 如果您确实需要处理 10,000 个并发用户,而这可能通过专门的软件和库来实现 - 最好建议您设置多个服务器并对其进行负载平衡。
  • 我有一个负载平衡的环境。首先,我在这里尝试使用 30 个用户。 IIS 最多只能支持 30 个并发用户。
  • 问题到底是什么,每个处理器的线程池中有 20 个工作线程并不一定意味着 w3wp.exe 进程只会使用 40 个线程。如果 CPU 已经达到最大值,则增加线程数不会增加服务的 HTTP 请求。降低 CPU 使用率需要对代码进行分析。
  • 肯:我同意你的看法。为什么我有超过 40 个线程?

标签: asp.net iis-7 threadpool application-pool


【解决方案1】:

这里有点问题。增加线程数将进一步增加 CPU 使用率。 (您的 2 个目标是不兼容的。)您不仅要求每个 CPU 做更多事情,而且上下文切换会产生额外的开销。

您可以使用非阻塞 IO 库进行调查,这实际上意味着每个 CPU 只有 1-2 个线程。但是,这可能是对您的项目的重大架构更改(可能不可行) - 您实际上可能会发现大部分 CPU 实际上是由于您的代码正在执行的工作而花费的,而不是因为任何与线程相关的.

听起来您需要对应用程序进行一些性能调整和优化。

【讨论】:

    【解决方案2】:

    您应该查看进行异步调用,以便在调用者等待响应时您的线程不会保持活动状态。

    http://msdn.microsoft.com/en-us/magazine/cc163463.aspx

    【讨论】:

      猜你喜欢
      • 2013-04-17
      • 2021-09-27
      • 2020-11-08
      • 2011-02-12
      • 2011-04-20
      • 2016-09-14
      • 2015-04-09
      • 1970-01-01
      相关资源
      最近更新 更多