远程 WMI 查询缓慢

16

我正在编写一个程序,用于查询三个不同的服务器以获取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专业版和Win 7服务器,每个服务器都与我的本地计算机在同一个域中。

你能包含你正在使用的 WQL 语句吗? - RRUZ
5个回答

1

0

0

针对您的编程语言,查看WBEM_FLAG_RETURN_IMMEDIATE标志。当使用Scriptomatic(微软提供的用于进行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


0

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

我不知道您的项目规格是什么,但我会这样处理: 1)创建一个控制台应用程序进行查询 2)在服务器上启动时安排10-15分钟的计划任务 3)通过MSMQ推送或记录到数据库或Web服务。 4)控制台应用程序应部署为ClickOnce,以便您有一个单一的更新点,如果需要额外的性能计数器。


我尝试在本地运行查询,就像我在问题中所说的那样,结果基本相同。我将尝试将其部署为ClickOnce。 - rafatic

0

由于您列出了两个不同的查询,有趣的是要知道它们是否都很慢还是只有其中一个很慢。

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

SELECT PercentProcessorTime FROM Win32_PerfFormattedData_Counters_ProcessorInformation

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接