一段时间后 WMI 出错
Posted
技术标签:
【中文标题】一段时间后 WMI 出错【英文标题】:WMI erroring out after a while 【发布时间】:2009-03-20 07:39:16 【问题描述】:我遇到了一些在 Windows 2003 Server 上运行的 VBScript 的有趣/烦人的问题(它们在 XP 上运行良好)。
脚本基本上定期调用 WMI 对象以提取性能信息并将其写入日志文件。它由每天早上 12:05 的计划任务启动并运行到午夜(或者如果它没有继续崩溃)。它归管理员所有,任务是"cscript xx.vbs blah blah blah"
。
有时它会运行几个小时,有时只运行几分钟。调用的形式为:
set objWMI = getObject("winmgmts:\\.\root\cimv2")
: : :
do lots of times:
set itemCpu = wmi.get("Win32_PerfRawData_PerfOS_Processor.Name='_Total'")
它返回的错误是一个对话框,指出远程过程调用无法执行,但没有额外信息(它确实给出了一个 32 位十六进制数字,下次发生时我会用它更新这个问题,但是我的 Google 搜索出现了非常通用的页面,所以我不确定代码是否会有所帮助。
它也曾经在以下行中崩溃(同样的错误),但我没有看到这个问题,因为我将它更改为使用 Win32_Perf Raw Data_PerfOS_Memory。
set colMem = wmi.execQuery("select AvailableKBytes" & _
" from Win32_PerfFormattedData_PerfOS_Memory",,48)
我认为它与网络无关,因为它在同一台机器上。
我还尝试将 objWMI 设置为空,并在每次循环中执行另一个 getObject,但这没有帮助。
另一个可能的问题,它实际上是在 VMWare Workstation 中运行的(但 XP 也是如此) - 下周我将在物理 PC 上运行 Win2k3 设置来测试它。
奇怪的是,它有时会运行几个小时而没有问题,收集数据并将其发送到日志文件。其他时候,它会在十分钟内崩溃。
我们中间的 Windows 专家有什么想法吗?
更新:
好吧,终于又失败了。这是我在截屏方面的一点努力:
+-------------------------------------------------+
| Windows Script Host |X|
+-------------------------------------------------+
| / Script: C:\Program Files\blah\blah.vbs |
| /\ Line: 271 |
| Char: 2 |
| Error: The remote procedure call |
| failed and did not execute. |
| Code: 800706BF |
| Source: SWbemServicesEx |
+-------------------------------------------------+
第 271 行是:
set itemCpu = wmi.get("Win32_PerfRawData_PerfOS_Processor.Name='_Total'")
wmi
之前已设置为:
set wmi = getObject("winmgmts:\\.\root\cimv2")
(这个在循环中不断被重新创建,所以我认为 RPC 连接过时不是问题)。
【问题讨论】:
关于事件中的错误,什么都没有? 事件查看器中什么都没有(我应该提到这一点)。 【参考方案1】:错误 1722(0x6BF) 是:RPC 服务器不可用。
一个建议:在你的脚本中明确释放所有对象
要执行最佳诊断,请尝试使用Microsoft Network Monitor 3.2 嗅探您的网络并搜索问题。(查看此帮助How to capture network traffic with Network Monitor)
好看。
【讨论】:
原来这是部分修复。有几个对象没有被显式释放,尽管我认为当变量被分配其他东西或超出范围时它们会被释放。问题的另一半是尽可能地打击 WMI。 当我在完成所有对象后立即显式释放所有对象,并且每十秒只查询一次 WMI,问题就消失了。好吧,它可能仍然存在,但我的进程会在每个午夜重新启动,因此运行缓慢的位可能只会使其每 25 小时发生一次,而不是每 3 小时发生一次 :-) 所以,+1 并接受。你帮助我避免了用 C 重写东西。【参考方案2】:如果您的脚本在运行时检查任何用户帐户,请查看此修补程序。这只是 2003 年的一个问题,这可以解释为什么它在您的 XP 系统上运行良好。
http://support.microsoft.com/kb/933593
它在工作中给我们造成了一些不完全符合文章描述的随机问题,但修补程序确实解决了我们的问题。
【讨论】:
@Jerb,为信息+1,但它没有解决我遇到的具体问题。以上是关于一段时间后 WMI 出错的主要内容,如果未能解决你的问题,请参考以下文章