使用IIS 7.5限制每个处理器的线程数

时间:2010-09-09 14:50:44

标签: asp.net-mvc performance threadpool

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

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

但是,我可以在IIS 7.5中找到如何配置它,任何人都可以帮助我吗?

谢谢, 罗布

2 个答案:

答案 0 :(得分:3)

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

    <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>

答案 1 :(得分:0)

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

编辑:

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

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

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