• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1611
  • Last Modified:

ASP.NET Memory Leak

We've got an IIS memory leak on Windows Server 2008 R2 64-bit.

The memory usage climbs steadily to 3 GB.

I've used the ANTS memory profiler to see what is happening and have a lot of memory held by _TimerCallback where  System.Threading.TimerCallback calls System.Web.Caching.CacheExpires.

We're not aware of any specific caching code in the app, so this seems to be something IIS is doing.

Can anyone suggest what the cause might be?
5 Solutions
StephanLead Software EngineerCommented:
The most memory usage mostly come from data or files. Check if you have any code that receives huge resources and put it in cache and stuff. Or maybe opening a file  and not closing it?
purplesoupAuthor Commented:
Thanks for your comment.

The thing is - this is a huge app - I need to have something more specific to look for - in particular I don't understand why the main classes left in memory appear to have come from this callback to System.Web.Caching.CacheExpires - particularly as I say there is no specific caching code in the app itself, so it look as if this is something IIS is doing.
btanExec ConsultantCommented:
May not be necessary be caching but can be objects created with each timercallback taken as argument. Memory leak is common when there is loop around creation of objects and making it even more complex when the argument to the new object has callback based variable...just quick thoughts


Sometimes there is also static instance  involved in such creation that can be slowly leaking the memory. Best practice is used static method where possible. Here is one article for info

Creating Active Directory Users from a Text File

If your organization has a need to mass-create AD user accounts, watch this video to see how its done without the need for scripting or other unnecessary complexities.

Ted BouskillSenior Software DeveloperCommented:
IIS is actually a very simple application.  All IIS does is either respond with static pages (HTML) or relay page requests to server side code.

Leaks are always due to the server side code.  It will take time but you'll have to find an object that has not released memory correctly.
purplesoupAuthor Commented:
Well the only code I could fine with timercallback was log4net - I can try turning it off. Anyone know how to do that? This is what I found and is what I'm going to try:


How do I completely disable all logging at runtime?

Setting the Threshold on the Hierarchy to Level OFF will disable all logging from that Hierarchy. This can be done in the log4net configuration file by setting the "threshold" attribute on the log4net configuration element to "OFF". For example:

<log4net threshold="OFF" />
Kamal KhaleefaInformation Security SpecialistCommented:
are you using virtual machine ?

if yes virtual always consumes memory

try to make sure that you are closing all the connections with the database

and try to comment the threading and try again
btanExec ConsultantCommented:
Actually I am thinking of even disabling the event handler method for all timecallback, maybe simply with another objection within that function and see if the "leaks" still exist. Just trying to be make sure we are "barking on the right tree".

I do not recommend logging to be disable where possible as this is security requirement, the key is how to offload this instead of having the code to perform it. of course if we are saying debugging log, that should be well coded with debug option set off and release build to eliminate all this.

One challenge I have in the past is the stage of optimisation which removed codes that inadvertently introduced and remove codes that missed logs and orphan codes. Have exception handler checks as well as they can introduce "leak" indirectly
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Creating Active Directory Users from a Text File

If your organization has a need to mass-create AD user accounts, watch this video to see how its done without the need for scripting or other unnecessary complexities.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now