What are the memory limits for IIS 7.0 app pools on x86 server

iis-7memoryperformancewindows-server-2008x86

I have the Windows Server 2008 SP2 EE x86 with a 6GB of memory. There are 10 apps pools working on IIS7. How much memory can use all 10 apps pools and each app pool separately? What are the limits on which my applications would throw OutOfMemoryExceptions?

And what is the best way to monitor performance and available free server resources for an IIS7 app pools? I tried to use default performance monitor and performance counters of processes (private bytes, virtual memory, working set) which are identities by index, but I can not link these counters to current app pools in real time.

Best Answer

Each App Pool can use up to 2GB of private address space, unless you've played with BCDEDIT options like 3GB.

If all 10 used all 2GB possible, you'd be in paging hell.

Your question is more generally around how processes can allocate memory on Windows - I'll throw some terminology at you for further research.

Private bytes - this is the amount of memory uniquely charged to the process Virtual bytes - this is the total amount of memory the process has allocated Working Set - this is how much RAM is actually being used by the process

Reserved memory - memory that's earmarked for use by an application, but doesn't actually have RAM/pagefile backing yet Committed memory - memory with backing

Now, the question becomes more complicated when you add app frameworks like .Net in - .Net has a lower-than-2GB workable maximum before OutOfMemoryExceptions happen. And generally, in my experience, they won't happen on an application that isn't either leaking something or under greater load than it can handle.

Perfmon with the process counters is typically all you can do with App Pools; you can enable the option to put the PID in the process name, if that helps, and APPCMD LIST WP regularly to keep a note of which app pool is doing what.