本文可帮助排查 WmiPrvse.exe 进程配额超出问题。
可能会遇到以下一个或多个问题:
一个或多个应用程序报告与 WMI 错误常量中列出的 Windows Management Instrumentation (WMI) 提供程序失败相关的错误代码或消息。
WmiPrvse.exe进程定期或间歇性地到达特定的内存、句柄或线程,并最终终止或退出。
以下事件定期或间歇性地记录在应用程序事件日志中。
备注
下面是两个事件示例。 事件的说明可能会根据WmiPrvse.exe过程和所涉及的 WMI 提供程序面临的问题而更改。
Log Name: Application Source: Microsoft-Windows-WMI Date: <DateTime> Event ID: 5612 Task Category: None Level: Warning Keywords: User: NETWORK SERVICE Computer: <MachineName> Description: Windows Management Instrumentation has stopped WMIPRVSE.EXE because a quota reached a warning value. Quota: PrivatePageCount Value: 538353664 Maximum value: 536870912 WMIPRVSE PID: 18524 Providers hosted in this process: %systemroot%\system32\wbem\ntevt.dll, %SystemRoot%\System32\wbem\cluswmi.dll, %SystemRoot%\System32\wbem\cluswmi.dll, %systemroot%\system32\wbem\cimwin32.dll
Log Name: Application Source: Microsoft-Windows-WMI Date: <DateTime> Event ID: 5612 Task Category: None Level: Warning Keywords: User: SYSTEM Computer: <MachineName> Description: Windows Management Instrumentation has stopped WMIPRVSE.EXE because a quota reached a warning value. Quota: HandleCount Value: 4099 Maximum value: 4096 WMIPRVSE PID: 4468 Providers hosted in this process: C:\Windows\System32\wbem\WmiPerfClass.dll, %systemroot%\system32\wbem\wmiprov.dll
当出现上述一个或多个问题(尤其是事件 ID 5612)时,这意味着其中一个 WMI 提供程序进程(WmiPrvse.exe)已超出其预定义的资源值,并且 WMI 服务已显式阻止它作为进程运行。
由停止 WmiPrvse.exe 进程处理的查询和启动进程的应用程序将失败。
什么是WmiPrvse.exe?
WmiPrvse.exe是 Windows 操作系统(OS)中可以托管一个或多个 WMI 提供程序的过程。 它由 WMI 服务管理。 每个 WMI 提供程序主要包含 WMI 提供程序 DLL 文件和 WMI 提供程序 MOF 文件。 WMI 提供程序是 WMI 基础结构的一部分,它接受来自 WMI 服务的任务,以处理本地或远程客户端启动的 WMI 查询。
每个 WmiPrvse.exe 进程都有一个预定义的阈值或资源配额,在活动时可以使用该阈值或资源配额。 例如:
HandlesPerHost
MemoryAllHosts
MemoryPerHost
ProcessLimitAllHosts
ThreadsPerHost
这些值定义为 WMI 类 __ProviderHostQuotaConfiguration下的实例。
事件 ID 5612
事件 ID 5612 是最具描述性且最有用的警告消息之一。 在第一个事件示例中,事件报告资源 PrivatePageCount
已超出536870912配额,并达到538353664的值。
当任何资源达到配额限制或超出值时,按设计,WMI 服务将显式停止进程进一步消耗。
在此示例中,资源是 PrivatePageCount
内存实体之一,每个主机受 MemoryPerHost
属性限制。
该事件还会列出在停止 WmiPrvse.exe 进程中托管的不同 WMI 提供程序。
%systemroot%\system32\wbem\ntevt.dll
%SystemRoot%\System32\wbem\cluswmi.dll
%SystemRoot%\System32\wbem\cluswmi.dll
%systemroot%\system32\wbem\cimwin32.dll
由于此问题,上面列出的所有提供程序都突然停止。
诊断问题
以下方案可能导致事件 ID 5612:
- 客户端应用程序执行异常、低效或大型查询。
- WmiPrvse.exe进程在处理 WMI 查询时不会按预期释放资源,这会导致内存泄漏并停止WmiPrvse.exe进程。
- 计算机或环境设置的规模很大。
分析传入查询有助于确定初始原因并解决问题。 否则,打开Microsoft支持案例需要更深入的调查。
若要诊断问题,请执行以下步骤:
了解问题的模式。
查看应用程序事件日志并筛选事件 ID 5612,以了解频率、历史记录和模式。
标识事件中列出的常见 WMI 提供程序。
列出的提供程序在所有事件中可能相同。 另一种可能性是其中一个提供程序消耗更多资源,导致此问题并干扰其他 WMI 提供程序。 在这种情况下,目标是诊断并识别有问题的提供程序。
分析由 事件 ID 5612 中列出的WmiPrvse.exe 进程处理的传入查询。
浏览“分析传入查询”、“查看 WMI 跟踪文件”和“查找导致 CPU 使用率较高的客户端 PID”部分中 提到的步骤,排查 WMI 高 CPU 使用率问题。 然后,可以识别:
- 客户端进程(es)
- 导致问题的查询
- 查询的频率
- 客户端进程(es)
客户端应用程序执行异常、低效或大型查询
当客户端应用程序执行异常、低效或大型查询时,可能会导致 WMI 提供程序消耗大量资源。
查看并了解应用程序执行此查询的原因以及是否需要执行此查询。 如果环境中不必要,请删除应用程序或阻止应用程序执行查询。 这应该有助于解决问题。 可以使用应用程序供应商解决此行为。
如果应用程序已知或预期执行 WMI 查询,导致WmiPrvse.exe进程大量消耗任何资源,并且WmiPrvse.exe进程中没有内存或处理泄漏,请将默认配额限制提高为默认值的两倍,则应解决这种情况。
注意
- 仅当没有任何资源泄漏时,此更改才有效。 否则,问题(事件 ID 5612)只会延迟一段时间,然后启动重复。
- 此更改将应用于系统上的所有 WMI 提供程序。 这意味着所有 WmiPrvse.exe 进程都将根据应用的新配额限制开始消耗资源。
增加默认配额限制可能会导致资源(如内存、句柄或 CPU)消耗较高。 因此,不建议在事先调查和了解问题的情况下增加配额限制。
若要增加配额限制,请执行以下步骤:
以管理员身份打开 Windows Management Instrumentation Tester (WBEMTEST),选择“ 连接”并连接到“根”命名空间。
选择枚举实例,在“类信息”对话框中键入__ProviderHostQuotaConfiguration,然后选择“确定”。 将显示“ 查询结果 ”窗口。 然后,双击第一个结果以编辑对象。
在“属性”部分中,向下滚动到下面提到的列表,并通过修改这些属性的值来增加资源。
在 “对象编辑器 ”窗口中,选择“ 保存对象”,关闭 “查询结果 ”窗口,然后退出 WBEMTEST。
重启 WMI 服务(Winmgmt),使更改生效。
WmiPrvse.exe进程不会按预期释放资源
如果WmiPrvse.exe进程在处理 WMI 查询时未按预期释放资源,则会导致内存泄漏并停止WmiPrvse.exe进程。 检查已处理的查询以及导致问题的WmiPrvse.exe进程的堆栈。
研究传入的查询有助于了解 WmiPrvse.exe 进程行为。
如果没有客户端应用程序或服务导致此问题,请进一步检查 托管事件 ID 5612 中标识的提供程序的WmiPrvse.exe 进程活动。
使用进程资源管理器查看线程和堆栈。
以管理员身份运行进程资源管理器,并使用“诊断问题”部分中提到的技术找到WmiPrvse.exe进程。
转到 “属性 ”并选择“ 线程 ”选项卡。
对于每个线程,可以查看堆栈并确定是否找到任何非Microsoft二进制文件或文件。
你可能会注意到防病毒软件、监视软件和威胁防护软件等软件中的二进制文件。 尽管这些软件应用程序有利于环境,但它们有时可能会中断并导致此类问题。 因此,可以暂时卸载它们并检查问题。
如果删除标识的非Microsoft产品有助于解决问题,则可以与产品供应商一起解决产品的此行为。
如果没有,则需要联系Microsoft支持专业人员来分析事件跟踪日志(ETL)跟踪并查看 WMI 提供程序的转储。
数据收集
在打开支持案例以进一步调查问题之前,可以按照使用 TSS 收集信息中的 步骤收集用户体验问题来收集信息。
下载 TSS.zip 并提取内容。
通过从提升的 PowerShell 命令提示符运行以下 cmdlet 启动跟踪。
.\TSS.ps1 -UEX_WMIAdvanced -noBasicLog
在重现你注意到的错误甚至 ID 之前,保留跟踪,或者出现已 识别WmiPrvSE.exe 问题。 请让跟踪运行超过两到三分钟。
根据 TSS 工具集,按照 PowerShell 命令提示符中的说明停止跟踪。
该脚本将创建包含所有跟踪结果和诊断信息的 zip 文件。 创建支持案例后,可以将此文件上传到安全工作区进行分析。