I just finished debugging an Asp.Net application that was dying intermittently from memory leaks caused by third party DLL's (in this case, the third party being microsoft). After mucking around trying to find what was wrong (after all, the private bytes were looking healthy at ~100mb), finally figured out what was the problem. It got to the stage where I could call our server admins and say 'the server is about to crash in the next hour', which got to be simultaneously good for a laugh and good for our users. Anyway, here's how its done:
Firstly, install process explorer. Its like task manager on steroids. You can get it here.
After launching process explorer, you'll need to have a look at the virtual bytes (known to perfmon as Process\Virtual Bytes) that asp.net is gobbling up. To see this figure, do View -> Select columns:
Click on the Process Memory tab and select 'Virtual Size':
Once you've done this, Process Explorer should look a little like the below. Make sure you click on the Virtual Size column so that it is sorted descending. Have a look:
If you look at the Virtual Size in the above screenshot you can see that it's just shy of 2 gigs. When it hits that 2 gig default limit, you're out of memory and dead in the water.