Re: Excess memory usage growth for a process

Eddie Lascu <[email protected]> Wed, 29 Jul 2009 14:40:04 -0400
Newsgroups gmane.comp.windows.devel.dotnet.advanced
Organization IBI Group
Message-ID <049b01ca107b$fcdcc8b0$f6965a10$@com>
Based on my preliminary reading of what this has to offer, it seems you =
can
integrate it with your VS IDE (not an option for me as my processes are
already deployed) or use it via WinDbg, but you need to look at the =
debug
version or the runtime version that has the .pdb file (not an option =
either
as I only have the sole runtime file deployed, but much easily fixable). =
Is
this statement accurate?

Thanks,
Eddie

-----Original Message-----
From: Discussion of advanced .NET topics.
[mailto:[email protected]] On Behalf Of Adam Tuliper
Sent: Wednesday, July 29, 2009 1:24 PM
To: [email protected]
Subject: Re: [ADVANCED-DOTNET] Excess memory usage growth for a process

http://blogs.msdn.com/alejacma/archive/2009/06/30/sos-cheat-sheet-net-2-0=
-3-
0-3-5.aspx

!DumpHeap -min 85000
!EEHeap -GC; !DumpHeap <LOH begin> <LOH allocated>
    -> Shows all objects in Large Object Heap (LOH/Gen 3).




On Wed, Jul 29, 2009 at 1:06 PM, Greg Young <[email protected]> =
wrote:

> Yes with ants you have to wait for the problem to happen.
>
> if you google SOS you can find some tutorials on it (it is a separate
> download from windbg ... it can also be used in visual studio!). John
> Robbins also has a great book covering the subject that I highly
> recommend.
>
> Cheers,
>
> greg
>
> On Wed, Jul 29, 2009 at 1:01 PM, Eddie Lascu<[email protected]> =
wrote:
> > Shoot, I didn't know SOS can do that for you. Can you share more =
about
> this
> > tool (a link to download it)? Is it part of the WinDbg tool that =
comes
> from
> > Microsoft? It's true that with ANTS I am at the mercy of the system,
> hoping
> > it will go nuts again and will have the memory size shut up crazy =
high.
> >
> > Cheers,
> > Eddie
> >
> >
> >
> > -----Original Message-----
> > From: Discussion of advanced .NET topics.
> > [mailto:[email protected]] On Behalf Of Greg =
Young
> > Sent: Wednesday, July 29, 2009 12:46 PM
> > To: [email protected]
> > Subject: Re: [ADVANCED-DOTNET] Excess memory usage growth for a =
process
> >
> > The wonderful thing about SOS is you dont need to run a profiler ...
> > when it happens take a memory dump, look whats actually happening in
> > the running app, is your LOH fragmented? Otherwise you are just
> > sticking your thumb up your butt and saying it will rain next
> > thursday.
> >
> > On Wed, Jul 29, 2009 at 12:43 PM, Eddie Lascu<[email protected]>
> wrote:
> >> I am using Reg Gate ANTS to profile the app, but it may take too =
much
to
> >> happen again. Before the spike I saw last weekend, the processes =
ran
for
> > 3-4
> >> months with no significant change in the size of memory used.
> >> Will look into Process.WorkingSet.
> >>
> >> Thanks,
> >> Eddie
> >>
> >>
> >>
> >> -----Original Message-----
> >> From: Discussion of advanced .NET topics.
> >> [mailto:[email protected]] On Behalf Of Greg =
Young
> >> Sent: Wednesday, July 29, 2009 12:38 PM
> >> To: [email protected]
> >> Subject: Re: [ADVANCED-DOTNET] Excess memory usage growth for a =
process
> >>
> >> Task manager shows you working set not total memory used but yes =
the
> >> process class can help you with that (Process.WorkingSet as an
> >> example).
> >>
> >> Have you verified the LOH being the problem by using SOS?
> >>
> >> Cheers,
> >>
> >> Greg
> >>
> >> On Wed, Jul 29, 2009 at 12:33 PM, Eddie Lascu<[email protected]>
> wrote:
> >>> Hi guys,
> >>>
> >>> In light of this article:
> >>>
> >>>
> >>
> >
>
http://www.simple-talk.com/dotnet/.net-framework/the-dangers-of-the-large=
-ob
> >> ject-heap/
> >>>
> >>> I am no longer sure what I have is a memory leak. I could see how =
some
> of
> >> the things that happen in my application match the scenarios =
described
> in
> >> the above article. Hence, I am ready to think about a workaround. =
My
> >> services are set up to run automatically and restart in case they
crash.
> >> While they never crash, I could leverage that feature and use it to =
fix
> > this
> >> excess memory usage that I experience every once in a blue moon. =
What I
> >> thought was to monitor the memory used and terminate the =
application in
> > case
> >> it exceeds a set threshold. The Windows Service Manager will then
> restart
> >> the service and all the memory will be reclaimed by the OS.
> >>>
> >>> My question at this point is whether the .NET Framework has some
metric
> >> classes that can help monitor the total amount of memory allocated
> within
> > a
> >> process. Surely System.Diagnostics must have something like that. =
Is
> > anyone
> >> aware of a way to find out what memory is used by a process, just =
like
> the
> >> Task Manager does?
> >>>
> >>> Cheers,
> >>> Eddie
> >>>
> >>>
> >>> -----Original Message-----
> >>> From: Discussion of advanced .NET topics.
> >> [mailto:[email protected]] On Behalf Of Shawn
> > Wildermuth
> >>> Sent: Monday, July 27, 2009 12:49 PM
> >>> To: [email protected]
> >>> Subject: Re: [ADVANCED-DOTNET] Excess memory usage growth for a
process
> >>>
> >>> Also, your 'using' statement stuff should help, but are you sure =
that
> all
> >>> your object (XML classes and db connection classes) that support
> >> IDisposable
> >>> are being cleaned up?
> >>>
> >>> Thanks,
> >>>
> >>> Shawn Wildermuth
> >>> http://wildermuth.com
> >>> https://agilitrain.com
> >>> Microsoft MVP (C#), MCSD.NET, Author and Speaker
> >>>
> >>> The Silverlight Tour is coming to a city near you!
> >>>
> >>>
> >>> -----Original Message-----
> >>> From: Discussion of advanced .NET topics.
> >>> [mailto:[email protected]] On Behalf Of John =
Warner
> >>> Sent: Monday, July 27, 2009 12:28 PM
> >>> To: [email protected]
> >>> Subject: Re: [ADVANCED-DOTNET] Excess memory usage growth for a
process
> >>>
> >>> I don't disagree with you just note that before 'some change' =
working
> OK
> >>> no memory leaks, after change, memory leak. We both know your code =
did
> > not
> >>> recompile itself to include a memory leak ...
> >>> That reminds has the framework/runtimes been updated/patched?
> >>>
> >>> John Warner
> >>>
> >>>
> >>>> -----Original Message-----
> >>>> From: Discussion of advanced .NET topics. [mailto:ADVANCED-
> >>>> [email protected]] On Behalf Of Eddie Lascu
> >>>> Sent: Monday, July 27, 2009 12:00 PM
> >>>> To: [email protected]
> >>>> Subject: Re: [ADVANCED-DOTNET] Excess memory usage growth for a
> >>>> process
> >>>>
> >>>> Hi John,
> >>>>
> >>>> I could check that with our system administrators. Do you think =
that
> can
> >>> be
> >>>> a possible explanation?
> >>>> I just talked with one of the DB Admin and she said she made some
> >>> changes
> >>>> on
> >>>> some Stored Produces, but nothing as dramatic as a patch update. =
She
> >>> also
> >>>> said that the drivers for the network cards were updated last =
week,
> but
> >>> I
> >>>> can't see how that can affect the memory used by my processes.
> >>>>
> >>>> Thanks,
> >>>> Eddie
> >>>>
> >>>>
> >>>> -----Original Message-----
> >>>> From: Discussion of advanced .NET topics.
> >>>> [mailto:[email protected]] On Behalf Of
> >>>> John Warner
> >>>> Sent: Monday, July 27, 2009 11:49 AM
> >>>> To: [email protected]
> >>>> Subject: Re: [ADVANCED-DOTNET] Excess memory usage growth for a
> >>>> process
> >>>>
> >>>> Not what you are seeking, but has anything on the server changed? =
An
> >>>> Oracle patch or something of that nature?
> >>>>
> >>>> John Warner
> >>>>
> >>>>
> >>>> > -----Original Message-----
> >>>> > From: Discussion of advanced .NET topics. [mailto:ADVANCED-
> >>>> > [email protected]] On Behalf Of Eddie Lascu
> >>>> > Sent: Monday, July 27, 2009 11:33 AM
> >>>> > To: [email protected]
> >>>> > Subject: [ADVANCED-DOTNET] Excess memory usage growth for a
> >>>> process
> >>>> >
> >>>> > Hi guys,
> >>>> >
> >>>> >
> >>>> >
> >>>> > I need your help with an issue I am having right now. I have
several
> >>>> windows
> >>>> > services deployed. These services gather some XML files from =
the
> >>>> internet
> >>>> > and then parse the content and save the information in the
database.
> >>> The
> >>>> > database is Oracle 11g, so the access is done through ODP.NET. =
I
> had
> >>>> some
> >>>> > issues before (and some of you with good memory may recall my
> previous
> >>>> > questions) where I noticed the memory used by these services
growing
> >>>> very
> >>>> > high. At the time, I understood that some classes in the =
ODP.NET
> >>> library
> >>>> use
> >>>> > some JAVA code and they are known for not cleaning properly =
after
> >>> them.
> >>>> As a
> >>>> > result I rewrote my code in such a way that every dynamic
allocation
> >>> of
> >>>> an
> >>>> > object from the ODP.NET library was encompassed in an "using"
> >>> statement,
> >>>> > like this:
> >>>> >
> >>>> >
> >>>> >
> >>>> > using (OracleCommand objDbCommand =3D new
> >>>> > OracleCommand(strSqlSelectStatement,
> >>>> > objConnection))
> >>>> >
> >>>> >
> >>>> >
> >>>> > All was fine for a very long time. All my services kept a =
constant
> >>> size
> >>>> when
> >>>> > it came to the total memory used, a size that hovered around =
55-60
> MB.
> >>>> This
> >>>> > was the case for months. At the beginning I checked the size =
almost
> on
> >>> a
> >>>> > daily basis. After a while, my confidence grew and I only =
checked
it
> >>>> once a
> >>>> > week or so. Every time I looked at the size of all my processes =
(I
> had
> >>> 4
> >>>> > that followed pretty much the same approach on dealing with =
those
> >>> Oracle
> >>>> > objects) the size was around that 55-60 MB mark.
> >>>> >
> >>>> >
> >>>> >
> >>>> > Now, all of a sudden, this last weekend, the size for some of =
the
> >>>> services
> >>>> > shut up to about 690 MB, despite the fact the service was =
running
> with
> >>>> the
> >>>> > exact same code as it did a month ago. This represents a =
potential
> >>> fatal
> >>>> > problem for the server that can get to a point where it can no
> longer
> >>>> > allocate memory, so I need to find a way to understand what the
heck
> >>> is
> >>>> > going on. Unfortunately, I do not have any metrics implemented =
in
my
> >>>> > application to log the total amount of memory used. That would =
have
> >>> been
> >>>> a
> >>>> > very good indication on when exactly did this surge started to
> happen.
> >>> I
> >>>> > could have checked the Event Viewer to see if the server got =
hit by
> a
> >>>> > nuclear bomb or something on that precise moment. I really =
don't
get
> >>>> this. I
> >>>> > mean that's why we moved to .NET in the first place, to be rid =
of
> such
> >>>> > concerns, like making sure all dynamically allocated objects =
are
> then
> >>>> > destroyed.
> >>>> >
> >>>> >
> >>>> >
> >>>> > Can anyone give me an idea on how to investigate this issue? =
Are
> there
> >>>> tools
> >>>> > out there that could be used to pick at the memory allocated by =
a
> >>>> process
> >>>> > and see what are those objects that take up so much  memory? =
For
the
> >>>> time
> >>>> > being, I have the processes running, but two of them are at or
close
> >>> to
> >>>> 690
> >>>> > MB and I don't know how long will I be able to keep them =
running.
> >>>> >
> >>>> >
> >>>> >
> >>>> > If you had an issue like this, what would you try to do?
> >>>> >
> >>>> >
> >>>> >
> >>>> > Any suggestion will be greatly appreciated.
> >>>> >
> >>>> >
> >>>> >
> >>>> > TIA,
> >>>> >
> >>>> > Eddie
> >>>> >
> >>>> >
> >>>> >
> >>>> >
> >>>> > =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> >>>> > View archives and manage your subscription(s) at
> >>>> > http://peach.ease.lsoft.com/archives
> >>>>
> >>>> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> >>>> View archives and manage your subscription(s) at
> >>>> http://peach.ease.lsoft.com/archives
> >>>>
> >>>> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> >>>> View archives and manage your subscription(s) at
> >>>> http://peach.ease.lsoft.com/archives
> >>>
> >>> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> >>> View archives and manage your subscription(s) at
> >>> http://peach.ease.lsoft.com/archives
> >>>
> >>> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> >>> View archives and manage your subscription(s) at
> >> http://peach.ease.lsoft.com/archives
> >>>
> >>> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> >>> View archives and manage your subscription(s) at
> >> http://peach.ease.lsoft.com/archives
> >>>
> >>
> >>
> >>
> >> --
> >> Les erreurs de grammaire et de syntaxe ont =E9t=E9 incluses pour =
m'assurer
> >> de votre attention
> >>
> >> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> >> View archives and manage your subscription(s) at
> >> http://peach.ease.lsoft.com/archives
> >>
> >> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> >> View archives and manage your subscription(s) at
> > http://peach.ease.lsoft.com/archives
> >>
> >
> >
> >
> > --
> > Les erreurs de grammaire et de syntaxe ont =E9t=E9 incluses pour =
m'assurer
> > de votre attention
> >
> > =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> > View archives and manage your subscription(s) at
> > http://peach.ease.lsoft.com/archives
> >
> > =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> > View archives and manage your subscription(s) at
> http://peach.ease.lsoft.com/archives
> >
>
>
>
> --
> Les erreurs de grammaire et de syntaxe ont =E9t=E9 incluses pour =
m'assurer
> de votre attention
>
> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> View archives and manage your subscription(s) at
> http://peach.ease.lsoft.com/archives
>

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
View archives and manage your subscription(s) at
http://peach.ease.lsoft.com/archives

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
View archives and manage your subscription(s) at http://peach.ease.lsoft.com/archives