Thoughts from the EPS Windows Server Performance Team
Useful Microsoft Blogs
Hi folks, Mark Ghazai here once again with a quick tidbit on tweaking the WMI Provider Service (WMIPRVSE.EXE). We’ve been getting some calls recently about the performance of this service and some failures that customers have been experiencing – in particular “Out of Memory” errors when certain WMI-related tasks are running. We’ve talked about various memory management issues in previous posts, but the WMI Provider Service has some interesting quotas that administrators should be aware of. So, as the saying goes … tally ho!
Within the WMI System Classes there is a configuration class for host provider processes. The name of this class is _ProviderHostQuotaConfiguration. This class allows limits to be set on host process usage of system resources. The different properties available are:
When the WMI Provider service reaches its quota limit, WMI queries that are being handled by that instance of WMIPRVSE.EXE will most likely fail. However, there are applications like System Center that may require more memory or handles for the process. These quotas are configurable, however – do not modify these quotas for the sake of modifying them! If the WMIPRVSE.EXE process is actually leaking handles or memory, modifying the quota will only delay the issue from occurring, not eliminate it. In instances such as these, normal leak troubleshooting must be performed to identify the root cause.
That having been said, if you are in a situation where there is a need to modify these values, you can do so using the steps below:
Note: you aren’t connecting to CimV2 or any other namespaces. It’s ROOT
<In the case of modifying the memory quota;>
A quick note here - on Windows XP and Windows Server 2003 systems, the memory quota per host is 128MB. For Windows Vista and Windows Server 2008 systems the memory quota per host is 512MB. The rest of quotas are all the same. And, with that, it’s time to bring this post to a close. Take care!
- Mark Ghazai
Absolutely great article!
I had a case of distributed processing where main unit launches many processes over network. I was stuck for several days trying to find any reasonable answer for crashing on OutOfMemory child processes launched via WMI.
And finally I discovered your article that helped me 100%!
Thanks a lot, guys!
Thank you for your article. It did not directly help me with my problem, but it put me on the right track.
My issue was that I was getting a Quota violation every time I tried to start a notification event. Thanks to your article I was able to track the setting down. It turned out that the __ArbitratorConfiguration has a property called PollingMemoryPerUser and PollingMemoryTotal. These values were set at there default of 5 and 10 MB respectively. I was able to increase these values and run my notification query.
Great!! Perfect article. This solved a big issue.
Wish I could have reached the stage to actually run this...
Unfortunately I have run into an issue when running WBEMTEST
I type in "_providerhostquotaconfiguration" without the quotes of course and end up with an error...
Description: Invalid class
Whats up with that?
I am running some application using task scheduler. This app is using a lot of WMI queries. After task is finished WMI service doesn't release memory. Each run it consumes more and more memory until it reaches the quota described here. So, after couple hours(maybe be longer) I got "out of memory exception" for ~5-20 minutes, and i cannot run my queries during that time :-(. Shouldn't WMI provider release that memory? How do I troubleshoot - what specific query is leaking?
How to automate this?
Now I need to do it on few machines
How can I do it from powershell or commandline?
use a double __ as the prefix.
What is the default value for "MemoryPerHost" on Windows 2008 R2 64-Bit?
Also, what the maximum quota for this value on Windows 2008 R2 64-Bit?
Is there a default quota for the MemoryPerHost on a Windows 2008 R2 64-Bit? If so, what is the amount?
I get to step 6 and type in __ProviderHostQuotaConfiguration when I click on OK i get a box poppin up saying
Description: Quota violation
I am running in circle...
any idea ?
There is a fix for this problem. It happens that both Windows Server 2008 and Windows 7 have a memory leak on the Win32_Service Class.
You can find the technet article here.
In the above article is also the fix for that, I am attaching also the link: support.microsoft.com/.../981314
I want to know, Is restart really needed if I change the WMI memoryperhost value.
I worte a VB script and and executed ,it changed the value without restarting.So is it not providing newly set memory value to the runing application?
Yes, a restart is required for the new value to take effect.
What is the best way to deploy MemoryPerHost value setting of 536870912 to hundreds of Window 2003 server? Through GPO or via SCCM? And if anyone knows how, how will it be done step by step?
How do you setup the "MemoryPerHost" settings through the registry using Group Policy Preferences? Is it possible?