奇怪的Asp.Net线程池大小调整行为
我正在对IIS 7.5上托管的.Net 4.0 MVC应用程序进行负载测试(默认配置,尤其是processModel autoconfig=true),并观察到.Net如何管理线程的奇怪行为。 提到“当达到最小值时,线程池可以创建额外的线程或等待某些任务完成”。 线程被阻塞的持续时间似乎在创建新线程还是等待任务完成方面起着作用。不一定会产生最佳吞吐量。 问题:是否有任何方法控制该行为,以便根据需要生成线程并最小化请求队列 观察: 我在一个测试控制器操作上运行了两个测试,除了线程之外,它并没有做太多的工作奇怪的Asp.Net线程池大小调整行为,asp.net,performance,iis,threadpool,Asp.net,Performance,Iis,Threadpool,我正在对IIS 7.5上托管的.Net 4.0 MVC应用程序进行负载测试(默认配置,尤其是processModel autoconfig=true),并观察到.Net如何管理线程的奇怪行为。 提到“当达到最小值时,线程池可以创建额外的线程或等待某些任务完成”。 线程被阻塞的持续时间似乎在创建新线程还是等待任务完成方面起着作用。不一定会产生最佳吞吐量。 问题:是否有任何方法控制该行为,以便根据需要生成线程并最小化请求队列 观察: 我在一个测试控制器操作上运行了两个测试,除了线程之外,它并没有做太
- 50个请求/秒,页面休眠1秒
- 5个请求/秒,页面休眠10秒
解决方案:略微增加machine.config中的minWorkerThreads,以处理预期的流量突发。(4将在16核机器上为我们提供64个线程) 虽然我无法解释您看到的行为,但这里有一点贡献:线程池算法不使用队列大小作为输入,也不应该使用。它尝试启发式地最大化吞吐量。(它在这里做不到。)@usr:你说“而且它不应该”是什么意思?在我看来,队列大小在决定是否有必要增加更多线程以最大化吞吐量时至关重要。如果吞吐量在x个线程时是最佳的,为什么队列大小加倍会改变最佳吞吐量?你的案子是伪造的,因为你在睡觉。您拥有+inf.最佳吞吐量。真正的系统在某一点上趋于平稳。(别误会:我仍然在说线程池无法检测到这里的最佳线程数。它应该继续添加。)