out of memory

T

Tina

My asp.net app that ran fine on my dev boxes is having problems at my web
hoster who is running IIS 6. I'm getting Out of Memory exceptoions. When
my web hoster bounces my app, the problem goes away for a couple of days.
Sounds like I have a Memory Leak, but my application is managed and garbage
collection is automatic, right?

How can I track available memory and what kinds of tools are available to
shoot this kind of problem?
Thanks,
T
 
K

Kevin Spencer

Hi Tina,

Yes, it is possible to Manage to write your own custom Managed Memory leak.
Garbage Collection IS automatic, but unless you put your cans out on the
street, they will never get picked up. IOW, the purpose of Memory Management
and Garbage Collection is not to allow you more time to play Solitaire, but
to help you prevent your own forest fires, as Smokey the Bandit would say.
;-)

The first thing you need to do is to determine that you will, in the future,
take more responsibility for your code. As Fox Mulder would say, "Trust No
one" (not even content from Microsoft!). Or, as my old boss when I was a
carpenter in Skokie Indiana would say "Measure twice, cut once."

Second, let's have a look at some diagnostic tools and techniques. One thing
I might point out regarding why it may have worked so beautifully on your
machine is, when you start a project in Visual Studio for debugging, it
restarts the application, thereby wiping out all accumulated memory for that
application. If you didn't use Visual Studio, well, you probably didn't put
the app under any stress. For example, the Application will stop itself 20
minutes after the last client Request, and won't start again until the next.
A good practice is to put the app first on a staging server and then put it
under some stress over a long period of time. Microsoft Application Center
2000 is a free tool that you can download from Microsoft.com for testing ASP
and ASPO.net apps. It can put a simulated load on your app, enabling you to
see how it functions under stress.

Windows Taks Manager can be used to monitor memory and processor performance
easily while running your app. You can also set up Performance Counters in
your app for monitoring and/or recording various aspects of your app's
performance while running it.

Of course, logging is also an excellent tool to employ in your app for
debugging purposes of various types.

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
What You Seek Is What You Get.
 
V

vMike

Tina said:
My asp.net app that ran fine on my dev boxes is having problems at my web
hoster who is running IIS 6. I'm getting Out of Memory exceptoions. When
my web hoster bounces my app, the problem goes away for a couple of days.
Sounds like I have a Memory Leak, but my application is managed and garbage
collection is automatic, right?

How can I track available memory and what kinds of tools are available to
shoot this kind of problem?
Thanks,
T
You can use something like this on you development machine and see if peak
memory keeps growing. You probably can't use it on your hoster with proper
permissioning.

Dim strReport As String
Dim objInfo As ProcessInfo = _
ProcessModelInfo.GetCurrentProcessInfo
strReport = "The process ID is " & _
objInfo.ProcessID & ". " & _
"Current status is " & _
objInfo.Status.ToString & ". " & _
"Peak memory used was " & _
objInfo.PeakMemoryUsed & ". " & _
"Request count is currently " & _
objInfo.RequestCount & "."
Response.Write(strReport)
 
T

Tina

Kevin,
do you have any practical information or know where to look regarding what
kinds of things Don't get cleaned up. I have connections, and IO streams,
and things like that. I'm not explicitly disposing of anything and I have
never read that this was recomended.
t
 
T

Tina

Michael,
thanks for that good, brief, practical answer. I'll look into
GetCurrentProcessInfo.

Do you know of specific things that garbage collections does not clean up?
T
 
G

Guest

Tina,

Are you closing all the database connections, datareader objects,
memorystreams ?
you might want to try using the
using()
{
}
that i presume automatically calls dispose.
just to be on safe side call dispose.
Also you might want to look at application stress tool from m
http://www.microsoft.com/downloads/...5A-062A-439E-A67D-75A89AA36495&displaylang=en

Run it on your dev box. You normally dont stress test on dev. Try running
this tool to emulate user load on production box.

HTH

Regards,

Hermit Dave
http://hdave.blogspot.com
 
K

Kevin Spencer

Sure Tina.

Anything that implements IDisposable should be disposed. Connections and
DataReaders should always be closed. Any time you open a file, be sure to
close it (best done using a Try/Catch/Finally block, in the Finally block,
to ensure that an exception doesn't foil your plan. Anything involving IO is
expensive, because opening a file means reading the hard drive, rather than
memory. Also, IO is high-priority.

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
What You Seek Is What You Get.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top