I have a requirement to configure several settings in my IIS application pools away from their defaults, but I am not finding great guidance nor am I having much luck with trial-and-error experimentation.

I have two application pools in use. One hosts a single application, the other hosts two. These applications are used to support day-to-day work in our office, being a local instance of TFS that users access either via a website or a local Visual Studio client. The machine is a virtual Windows Host with 16GB maximum RAM, with regular usage hovering around 10.5GB.

The values in question are Recycling Request Limit, Private Memory Limit, and Virtual Memory Limit.

The default value for all three of these is "0", which indicates "Unlimited". This isn't allowed.

So far, it appears that whenever I set basically any value in the fields in question, performance of TFS degrades. It's still accessible, but noticeably way slower.

For the memory limits, I had found some guidance online that the applications should only normally use something like 1.6GB, so I began my trial with a 2GB limit on both pools. This didn't work well, so I kept increasing it until I was offering both pools the maximum limit of 16GB (expressed in kb, so 16777216kb). The quantities used in both the Private Memory Limit and Virtual Memory Limit were kept the same, since nothing seemed to indicate they should be separate.

Request Limits for recycling, another value that can't be "0" anymore, was set to 35000 - which was an IIS 6.5 "best practice", apparently.

I am uncertain why performance has degraded. It would seem to me that these configuration changes are preventing IIS applications from getting all the memory they need, causing them to bog down. However, I am, apparently, permitting the applications in question to use 16GB - which for sure would be the same as "0", since that is the most memory they'd be able to take from an "Unlimited" setting on a 16GB RAM hosting VM.

Setting the memory limits back to "0" boosts performance, and setting the Request Limit back improves it just a bit more.

Curiously, regardless of what these settings are at, machine memory usage doesn't seem to deviate.

Unfortunately I am at a loss as to how to configure this correctly, as the requirements in question make no proscriptions. Beyond just finding advice on what quantity to set it, I was also unable to find a concrete resource on how to figure it out on my own - that is, I can hand-jam in someone else's values, but it's not clear on how I should be able to look at my own applications and derive a result based on some known value. I do know that the w3wp process is an IIS worker process that manages application pools - but it only seems to want a peak of ~228,000K - according to Task Manager, anyways.

How should I configure these memory-handling settings, and on what should I base that decision? I am unsure why if I am offering it the maximum amount of memory on the system (16GB) it would perform less well than if I was offering it an unlimited amount (which itself would be bound by the system's memory limit of 16GB anyways).

  • 1
    Those memory settings are there since IIS 6 to fight against memory leak issues of badly written web apps. So unless your web apps are explicitly experiencing memory leak, don't change the defaults to bother yourself. – Lex Li Oct 14 '20 at 16:34
  • Yes, that does seem to be the case; I was made aware of this article here, which seems to indicate that leaving them alone is actually an ideal case: techcommunity.microsoft.com/t5/core-infrastructure-and-security/… Strange that there exists a requirement to change this. – The ITea Guy Oct 15 '20 at 15:32

It appears to be best to leave these settings alone unless there is a major issue that needs to be addressed - see this: https://techcommunity.microsoft.com/t5/core-infrastructure-and-security/iis-best-practices/ba-p/1241577


Setting the virtual memory limit to anything other than 0 seems to cause major issues on iis 10 64bit. To comply with rules that require a value other than 0, I found setting the limit to the maximum allowed value of 4294967295 seems to work just as well as setting it to 0 (unlimited)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.