Re: Excess memory usage growth for a process
Eddie Lascu <[email protected]> Thu, 30 Jul 2009 14:03:35 -0400
| Newsgroups | gmane.comp.windows.devel.dotnet.advanced |
|---|---|
| Organization | IBI Group |
| Message-ID | <058f01ca1140$0e9b7a50$2bd26ef0$@com> |
Thank you, Guys. I will look into that as well. Do I need a special = start of the process if I am to use ADPlus or I can attach to the process later? -----Original Message----- From: Discussion of advanced .NET topics. [mailto:[email protected]] On Behalf Of Greg Young Sent: Thursday, July 30, 2009 1:52 PM To: [email protected] Subject: Re: [ADVANCED-DOTNET] Excess memory usage growth for a process Yep exactly what ADPlus is meant for! you can even do this right within ADPlus :) On Thu, Jul 30, 2009 at 1:49 PM, Wilson, = Phil<[email protected]> wrote: > Not answering this particular question, but I believe you could hook = all this together to automatically get that dump when the memory gets large = if it's rare enough that you don't want to sit and look at it all day. = Perfmon has triggers that can fire off a script, and you can fire off the = debugging script ADPlus to dump your process with the -hang option. > > Phil Wilson > > > -----Original Message----- > From: Discussion of advanced .NET topics. [mailto:[email protected]] On Behalf Of Eddie Lascu > Sent: Wednesday, July 29, 2009 11:40 AM > To: [email protected] > Subject: Re: [ADVANCED-DOTNET] Excess memory usage growth for a = process > > 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> > =A0 =A0-> 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 =A0memory? = 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 > > = =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 > --=20 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