远程WMI查询慢

本文关键字:查询 WMI 远程 | 更新日期: 2023-09-27 18:10:24

我正在编写一个程序,该程序查询三个不同的服务器,以获得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服务器,每个服务器与我的本地计算机在同一域。

远程WMI查询慢

也许用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

尝试在本地查询以调查性能问题。如果仍然很慢,请检查您的查询。

我不知道你的项目规格是什么,但我想这样做:1)创建一个控制台应用程序查询2)每10-15分钟在服务器启动时安排它3)通过MSMQ或日志推送到数据库或web服务。4)控制台应用程序应该被部署为clickonce,这样你就有一个单点更新,如果你需要额外的性能计数器。

既然您列出了两个不同的查询,那么了解它们是两个都很慢还是其中一个很慢会很有趣。

在过去,我经历过对WIN32_Processor的查询在某些Windows版本上可能很慢。如果是这种情况,也许您可以从其他(希望响应更快)对象中获得所需的信息,例如Win32_PerfFormattedData_Counters_ProcessorInformation:

SELECT PercentProcessorTime FROM Win32_PerfFormattedData_Counters_ProcessorInformation

查看您的语言的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

您可以尝试两件事来检查它是否适合您的。

  1. 尝试使用PowerShell脚本。http://www.powershellpro.com/powershell-tutorial-introduction/powershell-scripting-with-wmi/

  2. 或者您可以使用Windows中可用的工具-名为的wbemtest。如果你没有从任何编程语言查询以上WQL,那么你应该尝试以上两个选项。