Hi, Robert.
re:
!> The server it is being tested on has 4GB of RAM, with the 3GB switch on boot.
The 3GB switch limits the *virtual address space*, not the working memory set.
re:
!> <processModel enabled="true" memoryLimit="20" ... />
!> According to the documentation this should have
!> limited the virtual bytes to approx 800 MB for the process
Since, if you use the 3GB switch, you have 3GB for user mode virtual address space
and 1GB of kernel mode virtual address space, and kernel mode virtual address space
is not available to applications, you should be seeing physical RAM top out at 600MB
( 20% of the available 3GB user mode address space ) ...and your application recycling at that point.
20% is way too little for IIS and ASP.NET to function efficiently.
Try setting that to at least 40-50%. The default is 60%.
You need to distinguish between memory usage and virtual address space.
The term "address space" refers to how a numerical value (known as an "address")
is interpreted when it is used to access some type of resource.
There is a physical address space; each address in the physical
address space refers to a byte in a memory chip somewhere.
The virtual address space is the set of possible pointer values
(addresses) that can be used at a single moment by the processor.
If you have an address like 0x12345678, the virtual address space
determines what you get if you try to access that memory.
The contents of the virtual address space changes over time, as you allocate and free memory.
It also varies based on context: each process has its own virtual address space.
Saying that 2GB or 3GB of virtual address space is available to user mode means that at
any given moment in time, out of the 4 billion virtual addresses available in a 32-bit value,
2 billion (or 3 billion) of them are potentially usable by user-mode code.
What I would suggest is taking a look at your code and seeing which
processes are causing the extremely large usage of virtual memory.
Maybe Process Explorer could give you an inkling as to which processes are hogging your memory.
Download it from :
http://www.microsoft.com/technet/sysinternals/utilities/processexplorer.mspx
The processes' images will have some info for you.
That said, your basic problem is that you're running in IIS 5.0 compatibility mode.
When a server is running in IIS 5.0 isolation mode, application pools,
***recycling***, and health monitoring features are unavailable.
That makes debugging memory processes a tad more difficult,
and that recycling is not available is the reason why you are seeing RAM use run to 2GB.
Is there any reason you're running IIS 5 isolation mode ?
Can you switch to IIS 6.0's worker process isolation mode ?
If you can do that ( IIS 5.0 compatibility is not too-often needed ),
you'll be able to use recycling...and your IIS processes will keep themselves healthy.