views:

3278

answers:

4

We host a rather large (self written) ASP.NET website for our customers. It consists of a web service, a web site and a image serving web site, all three in their own virtual directory. The three virtual directories are together in one application pool. The pool has both memory limits (maximum virtual memory and maximum used memory) set to 500 megabytes.

However, the application pool suffers many recycles, even with only one user at a time. The eventlog message says:

A worker process with process id of 'xxxx' serving application pool 'xxxx' has requested a recycle because it reached its virtual memory limit.

However, observing the worker process with Process Explorer shows nothing that supports this message. Which counters should I watch to observe the memory that is in fact limited by both settings?

Update 1

Observing the process in Task Manager shows a 'mem usage' and 'vm size' of around 100 MB, still the process is recycled with the above message. 5 GB physical memory available on the server...

Update 2

Although the web site is rather large, the problem concentrates in a small portion of the application. It executes a query (using Oracle) and binds the results to a gridview and repeater webcontrol. The results consists of a short description and an icon (loaded through the image serving web site). If I execute 10 search actions after each other, each giving 9 results, the work process shows mem usage and vm size of around 100 MB and recycles...

Update 3 Switching of the usage of the image serving web site does not result in better results. So I think it is fair to say that the problem is something else.

A: 

Try using the Windows Task Manager. On the processes tab, go to the View menu and choose Select Columns. Select the Virtual Memory Size column and then observe the value for the asp.net worker process.

NYSystemsAnalyst
+2  A: 

Just as an observation... If your "image serving" site happens to do any inline image processing/generation, you can quickly swallow up memory by not calling Dispose() on any disposable resources - particularly those that are wrapping native functionality...

It's not a direct answer to your question, but it might help to look into the underlying problem that is causing the rampant memory use.

Andrew Rollings
Thanks for the hint, but I've already looked into that.
Michiel Overeem
That must be a pretty heavy duty application then if it foobars with one user!
Andrew Rollings
A: 

This might be useful link:

http://blogs.msdn.com/tom/archive/2008/06/25/asp-net-tips-finding-what-is-taking-up-memory.aspx

(And earlier posts which explain some more context to what he's doing)

Will Dean
A: 

Did you every find an answer? We have a similar app, i.e. .Net app with web service pulling back images. On large images, the app pool recycles even though all indications that memory is within limits.

Steve
In our particular situation, it looked like the iis app pool limits where to thight. The app runs fine without any limits.
Michiel Overeem