远程 WMI 查询慢
Posted
技术标签:
【中文标题】远程 WMI 查询慢【英文标题】:Remote WMI query slow 【发布时间】:2014-08-17 00:39:33 【问题描述】:我正在开发一个程序,该程序查询三个不同的服务器以获取 CPU 和 LogicalDisk 信息。
我查询的每台服务器都会在 6 到 15 秒内返回值(取决于服务器)。因此,获取所有值总共需要 31 秒(第一台服务器 15 秒,第二台服务器 6 秒,第三台服务器 10 秒)。
我尝试对每个查询进行多线程处理,它为每个服务器减少了 1 秒的执行时间,所以我认为这不是解决方案。
我还尝试在服务器中直接使用 powershell 运行查询:
第一台服务器:检索信息需要 10 秒(而不是 15 秒)
第二台服务器:检索信息需要 10 秒(就像我远程操作时一样)
第三台服务器)大约需要 1 秒(而不是 6 秒)
这是我的疑问:
SELECT LoadPercentage From WIN32_Processor
SELECT Size, FreeSpace From WIN32_LogicalDisk
我的问题是:在我的服务器上可以做些什么来使查询更容易吗? 我已经尝试停用防火墙和防病毒软件。
PS:我正在查询 Windows 2003 R2 服务器、Win XP pro 和 Win 7 服务器,它们都与我的本地计算机在同一个域中。
【问题讨论】:
你能把你正在使用的WQL
句子包括进来吗?
【参考方案1】:
也许它可以通过使用 CIM 而不是 WMI 来加快整个过程。
在这里你可以找到性能对比:http://community.spiceworks.com/topic/332657-powershell-cmdlet-performance-get-wmiobject-vs-get-ciminstance
当然,您也可以在 C# 中获取特定的 CimInstance: https://msdn.microsoft.com/en-us/library/dn313201(v=vs.85).aspx
【讨论】:
【参考方案2】:尝试在本地查询以调查性能问题。如果仍然很慢,请调查您的查询。
我不知道您的项目规格是什么,但我会这样处理: 1)创建一个查询的控制台应用程序 2) 每 10-15 分钟在服务器上安排一次启动 3) 通过 MSMQ 推送或登录到数据库或 Web 服务。 4) 控制台应用程序应部署为 clickonce,以便在需要额外性能计数器时可以单点更新。
【讨论】:
我尝试在本地运行查询,正如我在问题中所说,结果几乎相同。我将尝试将其部署为 clickonce【参考方案3】:由于您列出了两个不同的查询,因此很想知道它们是两个都很慢还是其中一个很慢。
过去我曾经历过在某些 Windows 版本上对 WIN32_Processor 的查询可能会很慢。如果是这种情况,也许您可以从其他(希望响应更快)对象获取所需信息,例如 Win32_PerfFormattedData_Counters_ProcessorInformation:
SELECT PercentProcessorTime FROM Win32_PerfFormattedData_Counters_ProcessorInformation
【讨论】:
【参考方案4】:查看您的语言的 WBEM_FLAG_RETURN_IMMEDIATE 标志。当使用 Scriptomatic(来自 MS 的用于进行 WMI 调用的小型 VBScript GUI)时,此选项会自动添加为选项的一部分。 48 表示 WBEM_FLAG_RETURN_IMMEDIATE | WBEM_FLAG_FORWARD_ONLY。 VBScript 示例:
objWMIService.ExecQuery ("Select * from Win32_NetworkConnection",,48)
https://msdn.microsoft.com/en-us/library/aa390880(v=vs.85).aspx
【讨论】:
【参考方案5】:您可以尝试两件事来检查它是否适合您。
尝试使用 PowerShell 脚本。 http://www.powershellpro.com/powershell-tutorial-introduction/powershell-scripting-with-wmi/
或者您可以使用 Windows 中可用的工具 - 名为 wbemtest。 如果您不是从任何编程语言查询以上 WQL,那么您应该尝试以上两个选项。
【讨论】:
以上是关于远程 WMI 查询慢的主要内容,如果未能解决你的问题,请参考以下文章