【问题标题】:Limiting the threads per processor using IIS 7.5使用 IIS 7.5 限制每个处理器的线程
【发布时间】:2011-04-10 07:33:51
【问题描述】:

我正在一个 ASP.NET MVC 应用程序上运行一些性能测试。我看到了很高的争用率和线程数随着时间的推移而增加。我相信这两者是相关的,因为线程被阻塞,线程池创建了新线程来处理传入的请求。我相信这反过来会使争用变得更糟(即更多的线程更多的争用)。

正确的方法可能是找出争用的原因,即使关键部分更小,验证是否确实需要所有锁等。但是,作为一个间歇步骤,我想限制线程数可以由线程池创建。我的信念是,尽管这可能会导致请求在队列中停留的时间更长,但总体上会有所改善,因为它会减少争用和线程上下文切换。

但是,我可以找到如何在 IIS 7.5 中进行配置,谁能帮助我?

谢谢, 抢

【问题讨论】:

    标签: asp.net-mvc performance threadpool


    【解决方案1】:

    终于找到了如何在 IIS 7.5 上执行此操作,您需要将 CLRConfigFile 属性添加到 applicationHost.config(位于 C:\Windows\System32\inetsrv\config 中)。

        <add name="ASP.NET v4.0" CLRConfigFile="C:\code\ThreadLeakWebSite\apppool.config" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" />
    

    然后您可以将限制线程数的参数添加到您指向的 apppool.config 配置中,即:

    <configuration>
        <system.web>
            <applicationPool maxConcurrentRequestsPerCPU="5000" maxConcurrentThreadsPerCPU="0" requestQueueLimit="5000"/>
        </system.web>
    </configuration>
    

    【讨论】:

      【解决方案2】:

      如果可能,您可以从代码中调用ThreadPool.SetMaxThreads

      编辑:

      似乎更好的地方是使用 web.config 文件中的 processModel/maxWorkerThreads 属性:

      <configuration>
        <system.web>
          <processModel maxWorkerThreads="5"/>
      ...
      

      意味着每个 CPU 最多 5 个线程。

      【讨论】:

      • 不能用于 IIS 中托管的应用程序。
      • 如果您尝试添加配置,您建议 Web 应用程序崩溃并显示错误状态,使用的配置只能放在 machine.config 中。我发现这篇文章 (blogs.msdn.com/b/tmarq/archive/2007/07/21/…) 表明它可以通过 reg 密钥或 aspnet.config 进行控制(取决于您的服务包),但这仅适用于 iis 7.0 而不是 7.5。
      猜你喜欢
      • 2019-04-23
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      相关资源
      最近更新 更多