I'm trying to set up IIS as a software load balancer on a Windows Server 2008 R2 box for back ends serving long lived, HTTP streaming requests. Individual curl requests work fine, but when I use httperf to make 10K connections to the IIS box the current requests seem to max out at 2500 for each of the 2 back ends, rather than the 5000 I would expect. Are the other requests being queued? If so is there some way around it? Is there something else I need to change? Should I use a different load balancer?
Asked
Active
Viewed 1,427 times
3
-
I'm a little confused by your question and admittedly I don't work with IIS that much, but IIS is a web server not a load balancer. Am I missing something? – joeqwerty Jun 14 '11 at 10:55
-
1IIS can be used as a software load balancer using Application Request Routing (ARR) – Jim Purbrick Jun 14 '11 at 11:09
-
Thanks for the heads up. I was not aware of that before, now I am. – joeqwerty Jun 14 '11 at 12:18
-
From the sound of the question, ARR is being used on the "load balancer" IIS machine. What operating system is being used for the two back end servers? Is it still IIS 7 on Windows 2008 Server (standard or R2)? 32 or 64 bit? etc. – Rob Jun 14 '11 at 12:35
-
The back end machines are running Python Paste HTTP servers on Windows 7 (we can move the load balancing IIS7 to Windows 7, we just happen to be testing on a Windows 2008 Server R2 box) all the machines are 64 bit. – Jim Purbrick Jun 14 '11 at 12:42
1 Answers
1
It sounds like you're limited by ARR's max concurrent limit. You can test by changing the load balancing algorithm to a different weight and see if the sum of the two nodes is still 5000. That will confirm that ARR is the bottleneck.
How are resources on the ARR server? I bet they are good, in which case it's just a matter of changing the settings. It sounds like ARR is doing a good job for you.
Your setting limit is likely system.webServer/serverRuntime appConcurrentRequestLimit which has a default value of 5000. Since you have a legit need to raise that, you can set it to something much higher on the ARR server(s).
Scott Forsyth
- 16,339
- 3
- 36
- 55
-
changing system.webServer/serverRuntime appConcurrentRequestLimit did the trick, thanks! – Jim Purbrick Jun 14 '11 at 14:42
-
looks like I've hit another limit at 16K concurrent requests, any idea what that might be? – Jim Purbrick Jun 14 '11 at 16:02
-
I'm not sure what the 16K would be. Do you get that when you access the servers directly, or is that through ARR? Here are two good locations to check: C:\Windows\System32\inetsrv\config\schema for IIS settings and for registry settings: http://blogs.iis.net/ksingla/archive/2007/12/30/list-of-registry-keys-affecting-iis7-behavior.aspx. Here's a video on how to check the schema: http://dotnetslackers.com/articles/iis/Mastering-IIS-Understanding-the-Schema-Week-19.aspx. – Scott Forsyth Jun 14 '11 at 20:02
-
This looks like an IIS/ARR limitation rather than a windows one as I can make over 16K connections directly to one of the back end servers. – Jim Purbrick Jun 15 '11 at 10:43
-
I'm not sure what setting would limit that. I don't see any IIS or ARR limits at 16K. To troubleshoot further, what you can do is watch perfmon to see what happens when it reaches the 16K connections. For example, do the web requests back up, or any other resource all of a sudden spike. That may show at which layer the limit has been reached. – Scott Forsyth Jun 21 '11 at 13:25