Re: Excess memory usage growth for a process

Greg Young <[email protected]> Wed, 29 Jul 2009 13:06:11 -0400
Newsgroups gmane.comp.windows.devel.dotnet.advanced
Message-ID <[email protected]>
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 = 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
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > ===================================
>>>> > View archives and manage your subscription(s) at
>>>> > http://peach.ease.lsoft.com/archives
>>>>
>>>> ===================================
>>>> View archives and manage your subscription(s) at
>>>> http://peach.ease.lsoft.com/archives
>>>>
>>>> ===================================
>>>> View archives and manage your subscription(s) at
>>>> http://peach.ease.lsoft.com/archives
>>>
>>> ===================================
>>> View archives and manage your subscription(s) at
>>> http://peach.ease.lsoft.com/archives
>>>
>>> ===================================
>>> View archives and manage your subscription(s) at
>> http://peach.ease.lsoft.com/archives
>>>
>>> ===================================
>>> View archives and manage your subscription(s) at
>> http://peach.ease.lsoft.com/archives
>>>
>>
>>
>>
>> --
>> Les erreurs de grammaire et de syntaxe ont été incluses pour m'assurer
>> de votre attention
>>
>> ===================================
>> View archives and manage your subscription(s) at
>> http://peach.ease.lsoft.com/archives
>>
>> ===================================
>> View archives and manage your subscription(s) at
> http://peach.ease.lsoft.com/archives
>>
>
>
>
> --
> Les erreurs de grammaire et de syntaxe ont été incluses pour m'assurer
> de votre attention
>
> ===================================
> View archives and manage your subscription(s) at
> http://peach.ease.lsoft.com/archives
>
> ===================================
> View archives and manage your subscription(s) at http://peach.ease.lsoft.com/archives
>



-- 
Les erreurs de grammaire et de syntaxe ont été incluses pour m'assurer
de votre attention

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