Re: increasing handles | large VM consumption | windows service on Win2k server
From: Ryan Ackerman (Ryan_at_SofTulz.Net)
Date: 04/14/04
- Next message: Ryan Ackerman: "Re: ManagementEventWatcher.start=OutOfMemoryException"
- Previous message: Gary Chang: "RE: WMI Event Security with the .NET Enterprise Instrumentation Framework"
- In reply to: Ivan Brugiolo [MSFT]: "Re: increasing handles | large VM consumption | windows service on Win2k server"
- Next in thread: Levi Wilson: "Re: increasing handles | large VM consumption | windows service on Win2k server"
- Reply: Levi Wilson: "Re: increasing handles | large VM consumption | windows service on Win2k server"
- Reply: Levi Wilson: "Re: increasing handles | large VM consumption | windows service on Win2k server"
- Messages sorted by: [ date ] [ thread ]
Date: Tue, 13 Apr 2004 20:23:22 -0700
If you think you might not be freeing resources in your app, I try and use
smart pointers where ever possible because I human and make lots of
mistakes...
CComPtr<IEnumWbemClassObject> pEnum;
CComPtr<IWbemClassObject> pObject;
And you said that you used proc explorer to look at the open handles... were
you looking a named handles as well as un-named? It was your process that
was leaking right?
Do you use any other librarys or is it only wmi calls?
-- Ryan Ackerman http://www.SofTulz.Net SofTulz.Net, Providing Administrators with more free time through automation. Ryan@SofTulz.Net "Ivan Brugiolo [MSFT]" <ivanbrug@online.microsoft.com> wrote in message news:eQ1NotaIEHA.2376@TK2MSFTNGP12.phx.gbl... > The problem is not easy in general. > For example, if you are using EOAC_SECURE_REFS on your service, > and WinMmgt is indicating instances to your process, and there is different > identity > between the time the interface was marshaled and when it's used, > then your interface will be released by RPCSS way after you are done with > your async query. > There are a handful of other cases that would be quite long to enumerate. > They involve different apartments, different identities, > cross process and cross machine boundaries. > Just to make sure this is the problem, if you let the service sit around > for few minutes after is has finished it's own activity, does the service > recover it's memory usage ? > There are generic leak tracking tools, like UMDH.exe. > You will be finding (pseudo) leaks in, maybe, rpcrt4, wbemprox, fastprox, > wbemcomn, > but, you may be able to guess which interface pointers are really leaked. > > -- > This posting is provided "AS IS" with no warranties, and confers no rights. > Use of any included script samples are subject to the terms specified at > http://www.microsoft.com/info/cpyright.htm > > > "Levi Wilson" <lewilson@purdue.edu> wrote in message > news:OUOCrsZIEHA.3968@TK2MSFTNGP12.phx.gbl... > > Ivan, I really appreciate all of your help, and i'm sorry if i'm being a > > pain... > > > > What do you mean un-authenticated calls that perform cleanup? I must be > > missing something here, but what you said sounds like what is happening, > > obviously some resources aren't being cleaned up, it's just that I was > under > > the impression that releasing my interface pointers was enough for the > > cleanup of these resources. I mean, it's the exact same thread that's > doing > > the same work running under a windows service as it is when it runs as a > > consol application, so i'm not making the connection here. Do you have > any > > suggestions or techniques for me to track down this issue, or to track > down > > what I need to do differently to ensure that these resources are being > > released? Please let me know any information would be useful for you to > > help with this, and i'm sorry if I don't give enough information. Thanks, > > again, in advance for any help! > > > > > > "Ivan Brugiolo [MSFT]" <ivanbrug@online.microsoft.com> wrote in message > > news:%23RJ4InXIEHA.3432@tk2msftngp13.phx.gbl... > > > One example: > > > you process may not allow un-authenticated calls to come through. > > > Certain un-authenticated calls may be used to perform cleanup. > > > If this does not happen the regular way, then your code may have to wait > > > until > > > RPCSS runs the distributed garbage collection. > > > This way the resources are "leaked" till they are reclaimed. > > > > > > -- > > > This posting is provided "AS IS" with no warranties, and confers no > > rights. > > > Use of any included script samples are subject to the terms specified at > > > http://www.microsoft.com/info/cpyright.htm > > > > > > > > > "Levi Wilson" <lewilson@purdue.edu> wrote in message > > > news:u9Oe$hVIEHA.3848@tk2msftngp13.phx.gbl... > > > > sorry, I do keep adding pieces, and here's anothere one :-D It runs > > under > > > a > > > > domain administrative account, not as local system when it's running > as > > a > > > > service. When you say COM initialization, are you talking about > > > > CoInitializeSecurity() and CoInitializeEx()? My DCOM permissions are > > set > > > up > > > > dynamically depending on the OS of the machine that i'm connecting to > > with > > > > calls to CoQueryProxyBlanket() and CoSetProxyBlanket(), so I don't > > > > understand the differences when it's running under svchost.exe as > > opposed > > > to > > > > explorer.exe...any ideas on where I could start to look/what to look > > for? > > > > > > > > "Ivan Brugiolo [MSFT]" <ivanbrug@online.microsoft.com> wrote in > message > > > > news:eAnXIlNIEHA.3240@TK2MSFTNGP12.phx.gbl... > > > > > You keep adding pieces. > > > > > If your application does not leak interface pointers if compiled as > > > > console > > > > > and run from your account, > > > > > but maybe it does when it's a serivce (run by localsystem ?) > > > > > then you should go after the differences in COM initialization, > > account > > > > and > > > > > DCOM permission. > > > > > > > > > > -- > > > > > This posting is provided "AS IS" with no warranties, and confers no > > > > rights. > > > > > Use of any included script samples are subject to the terms > specified > > at > > > > > http://www.microsoft.com/info/cpyright.htm > > > > > > > > > > > > > > > "Levi Wilson" <lewilson@purdue.edu> wrote in message > > > > > news:#o6nTWMIEHA.828@TK2MSFTNGP12.phx.gbl... > > > > > > Sorry, I wasn't descriptive enough...the #define CONSOLE_APP is > just > > a > > > > > > custom define statement in my code so that when it is defined, it > > > > compiles > > > > > > my program as a console app (how it originated before I changed it > > to > > > be > > > > a > > > > > > windows service), but if it's not defined it compiles it as a > > windows > > > > > > service. > > > > > > > > > > > > Example: > > > > > > > > > > > > void main() > > > > > > { > > > > > > #ifdef CONSOLE_SERVICE > > > > > > ServiceInitialization(0,NULL,NULL); > > > > > > > > > > > > cout << "Type '@' to quit: " << endl; > > > > > > char ch; > > > > > > cin >> ch; > > > > > > while(ch!='@') > > > > > > { > > > > > > cin >> ch; > > > > > > } > > > > > > > > > > > > SetEvent(g_hQuit); > > > > > > > > > > > > WaitForSingleObject(g_hThread,INFINITE); > > > > > > #else > > > > > > SERVICE_TABLE_ENTRY DispatchTable[] = { > > > > > > {"MyService", > > > MyServiceStart}, > > > > > > {NULL, NULL} > > > > > > }; > > > > > > if(!StartServiceCtrlDispatcher(DispatchTable)) > > > > > > { > > > > > > SvcDebugOut(" [MY_SERVICE] StartSvcCtrlDispatcher error = > %d\n", > > > > > > GetLastError()); > > > > > > } > > > > > > #endif > > > > > > } > > > > > > > > > > > > All my ServiceInitialization() function does is creates the thread > > and > > > > the > > > > > > events that my program waits for... > > > > > > > > > > > > See what I mean? I still use the exact same initialization, it > just > > > > > changes > > > > > > how it starts up...well, and also that it runs under Explorer.exe > > > rather > > > > > > than svchost.exe or whatever. Any ideas? Thanks again for your > > quick > > > > > > response...fastest I've ever experienced in a news group, nice > work! > > > > > > > > > > > > "Ivan Brugiolo [MSFT]" <ivanbrug@online.microsoft.com> wrote in > > > message > > > > > > news:u7rfgNMIEHA.3276@tk2msftngp13.phx.gbl... > > > > > > > I'm not familair with the #define CONSOLE_APP pre-processor > > setting, > > > > > > > (which development environment does it apply to ? > > > > > > > what does it change in linker settings ? > > > > > > > what does it change in OLE32 initialization settings ?). > > > > > > > It looks like a cros-apartment problem caused by different COM > > > > > > > initialization settings. > > > > > > > This may cause un-necessary cross-apartment marshaling, > > > > > > > and extra "mediators" interface pointers to be kept around. > > > > > > > > > > > > > > -- > > > > > > > This posting is provided "AS IS" with no warranties, and confers > > no > > > > > > rights. > > > > > > > Use of any included script samples are subject to the terms > > > specified > > > > at > > > > > > > http://www.microsoft.com/info/cpyright.htm > > > > > > > > > > > > > > > > > > > > > "Levi Wilson" <lewilson@purdue.edu> wrote in message > > > > > > > news:uSlnsuLIEHA.2836@TK2MSFTNGP11.phx.gbl... > > > > > > > > Ivan, thank you very much for your quick response. > > > > > > > > > > > > > > > > my interface pointers to these classes (IWbemServices, > > > > > > > IEnumWbemClassObject, > > > > > > > > etc.) reside in classes for the different types of information > > > that > > > > I > > > > > > want > > > > > > > > to gather, all with a generic base class that has the methods > to > > > > > > enumerate > > > > > > > > and gather the information that I want. The interface > pointers > > > are > > > > > > > released > > > > > > > > accordingly in these classes, and i've checked all of this > with > > > > debug > > > > > > > > strings etc. Another funny thing that I REALLY don't > understand > > > is > > > > > that > > > > > > > > when I #define CONSOLE_APP in my application to make it a > > console > > > > app > > > > > > > > (instead of starting the dispatch table, etc. it just spawns > my > > > > worker > > > > > > > > thread) everything seems to work fine. I don't see a large > > > increase > > > > > in > > > > > > > > either. Anyone have any clues on as to why this is happening? > > > > > Thanks, > > > > > > > > again, for any information that you can provide. > > > > > > > > > > > > > > > > > > > > > > > > "Ivan Brugiolo [MSFT]" <ivanbrug@online.microsoft.com> wrote > in > > > > > message > > > > > > > > news:eSiIfULIEHA.2164@TK2MSFTNGP12.phx.gbl... > > > > > > > > > Summary counters like "Virtual Memory" and "Handles" are way > > too > > > > > borad > > > > > > > to > > > > > > > > > give anything actionable. RPC connection across machines are > > > > "seen" > > > > > by > > > > > > > the > > > > > > > > > programmers > > > > > > > > > are interface pointers, like IWbemServices, > > > IEnumWbemClassObject, > > > > > > > > > that are given back to the programmer. > > > > > > > > > The responsability to close them is normally up to the > > > programmer, > > > > > > > > > by releasing the interface pointers when expected. > > > > > > > > > On average RPCSS is able to engage a garbage collection of > > IPIDs > > > > > > > > > on your process (for example, when the remote client dies > and > > > you > > > > > are > > > > > > in > > > > > > > a > > > > > > > > > server, > > > > > > > > > RPCSS will reclaim the stub resources minutes after the > client > > > > death > > > > > > was > > > > > > > > > detected). > > > > > > > > > If you are using the scripting interfaces, this is further > > > > > complicated > > > > > > > by > > > > > > > > > the wbemdisp layer > > > > > > > > > and the scripting engine. > > > > > > > > > > > > > > > > > > -- > > > > > > > > > This posting is provided "AS IS" with no warranties, and > > confers > > > > no > > > > > > > > rights. > > > > > > > > > Use of any included script samples are subject to the terms > > > > > specified > > > > > > at > > > > > > > > > http://www.microsoft.com/info/cpyright.htm > > > > > > > > > > > > > > > > > > > > > > > > > > > "Levi Wilson" <lewilson@direcway.com> wrote in message > > > > > > > > > news:b8119366.0404120915.6281db83@posting.google.com... > > > > > > > > > > i have a windows service that runs on a windows 2000 > server > > > > (sp3). > > > > > > It > > > > > > > > > > basically has a list of computers that I want to obtain > some > > > > > > > > > > information from periodically. when running, I observe the > > > > process > > > > > > > > > > with SysInternals process explorer and see that the > handles > > > > count > > > > > > as > > > > > > > > > > well as the Virtual memory size seems to increase every > time > > i > > > > > check > > > > > > > > > > the information on a PC. This seems to only happen on > > Windows > > > > > 2000 > > > > > > > > > > server. Has anyone experienced anything similar to this? > I > > > > > forgot > > > > > > to > > > > > > > > > > mention, that when I look in process explorer, 90% of the > > > > handles > > > > > > that > > > > > > > > > > are open seem to either be file handles with the following > > > > names: > > > > > > > > > > > > > > > > > > > > \device\tcp > > > > > > > > > > \device\afd\endpoint > > > > > > > > > > > > > > > > > > > > Is WMI not closing the RPC handles it opens when it > gathers > > > > remote > > > > > > > > > > information from the computers? What is happening? Any > > help > > > is > > > > > > > > > > greatly appreciated, and please let me know if more > > > information > > > > > > needs > > > > > > > > > > to be provided. > > > > > > > > > > > > > > > > > > > > Levi > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
- Next message: Ryan Ackerman: "Re: ManagementEventWatcher.start=OutOfMemoryException"
- Previous message: Gary Chang: "RE: WMI Event Security with the .NET Enterprise Instrumentation Framework"
- In reply to: Ivan Brugiolo [MSFT]: "Re: increasing handles | large VM consumption | windows service on Win2k server"
- Next in thread: Levi Wilson: "Re: increasing handles | large VM consumption | windows service on Win2k server"
- Reply: Levi Wilson: "Re: increasing handles | large VM consumption | windows service on Win2k server"
- Reply: Levi Wilson: "Re: increasing handles | large VM consumption | windows service on Win2k server"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|
Loading