Hi,
we have performance issues in one of our WCF web services.
We experience that:
- ASP.NET runs out of worker threads and starts queuing. No magic.
- WCF queues work items to be processed by an IO threads. Ok.
- I understand that delays can occur while new IO threads are being created. Those delays can be substantial.
However, it seems like no new IO threads are created at all or only extremely slowly.
Even after being in a state of 96 blocked worker threads for several minutes, there are only 9 IO threads!
The service is running on 8 core box. The pool holds one idle thread per core.
http://theburningmonk.com/2010/05/wcf-improve-performance-with-greater-concurrency/ (and all the blog entries from Wenlong Dong).
It seems the thread pool size increased by one additional IO thread while requests had been queued up for already more than 5 minutes.
Why does the size of the IO thread pool only change that slowly or maybe even not at all? What are the parameters to look for that control the growth of the pool?
WinDbg output:
0:000> !threadpool CPU utilization 17% Worker Thread: Total: 97 Running: 96 Idle: 1 MaxLimit: 800 MinLimit: 8 Work Request in Queue: 3
Number of Timers: 14
Completion Port Thread:Total: 8 Free: 1 MaxFree: 16 CurrentLimit: 9 MaxLimit: 800 MinLimit: 8
Pending work items:
Statistics: MT Count TotalSize Class Name 50e7c220 91 1820 System.ServiceModel.Channels.IOThreadScheduler+CriticalHelper+WorkItem Total 91 objects