我正在ASP.NET MVC应用程序上运行一些性能测试。我看到很高的争用率和线程数随着时间的推移而增加。我相信这两者是相关的,因为线程被阻塞新线程是由线程池创建的来处理传入的请求。我相信这反过来会使争用更加糟糕(即更多线程争用更多)。
正确的方法可能是解决争用的原因,即使关键部分更小,验证所有锁是否真的需要等等。但是,作为一个间歇步骤,我想限制线程的数量可以由线程池创建。我的信念是尽管这可能导致请求停留在队列中的时间越长,但总体上会提高,因为它会减少争用和线程上下文切换。
但是,我可以在IIS 7.5中找到如何配置它,任何人都可以帮助我吗?
谢谢, 罗布
答案 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个线程。