【问题标题】:Get the server's cpu utilization获取服务器的cpu利用率
【发布时间】:2015-03-28 21:47:09
【问题描述】:

我四处搜索并得到了这个显然适用于所有人的代码:

Set objWMIService2 = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") 
Set colItems = objWMIService2.ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor WHERE Name = '_Total'") 
For Each objItem In colItems 
    Response.Write( "CPU Usage Percentage: " & objItem.PercentProcessorTime & "%" )
Next

执行它我得到一个完全空白的页面,而不是错误。

实际上操作系统是在服务器上虚拟化的,是这个问题吗?如果是这样,有解决方法吗?

【问题讨论】:

  • 如果你得到一个没有错误的空白页面,这意味着For Each 内部的代码没有被执行,这意味着colItems 是空的。检查您的 WMI 查询。查询其他内容以进行测试。

标签: vbscript windows-server-2008-r2


【解决方案1】:

你遇到了什么错误?

这是我用于同一件事的内容(精简了一点)。它显示每个物理处理器的负载。

strComputer = "."
Dim arrProcessors : ReDim arrProcessors(2,0)

Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colCPUSystems = objWMIService.ExecQuery("Select AddressWidth,DataWidth,NumberOfCores,Name,MaxClockSpeed,LoadPercentage from Win32_Processor")
proc = 0
For Each objProc in colCPUSystems
    arrProcessors(0,proc) = objProc.NumberOfCores
    arrProcessors(1,proc) = objProc.MaxClockSpeed
    arrProcessors(2,proc) = objProc.LoadPercentage
    proc = proc + 1
    ReDim Preserve arrProcessors(2,proc)
    strOSBits = objProc.AddressWidth
    strHWBits = objProc.DataWidth
    strProcessorCores = objProc.NumberOfCores
    strProcessor = objProc.Name
    strProcessorSpeed = objProc.MaxClockSpeed
Next

For proc = 0 To UBound(arrProcessors,2)-1
    intLoad = arrProcessors(2,proc)
    intFree = 100-intLoad

    strProcessorInfo = strProcessorInfo & "Processor " & proc+1 _
    & ": " & arrProcessors(0,proc) & " Cores : Load " & intLoad & "%" & vbCrLf 
Next 

WScript.Echo strProcessorInfo

【讨论】:

  • 我得到了这个:处理器 1:2 核:负载 %
  • 这是否只发生在单台机器上?看起来可能需要重建性能计数器。尝试在本地计算机上运行 lodctr /r(从命令提示符)。
  • lodctr /r 给我这个:“错误:无法从系统备份存储重建性能计数器设置,错误代码是 2”。它是远程服务器上的虚拟化操作系统,它是从提供商自动配置的,但必须几乎是普通的
  • 检查this link - 确保您以管理员身份运行,如果是,请尝试从c:\windows\syswow64运行
  • 它从 syswow64 重建设置,但如果我运行 vbscript 代码仍然给我一个 intLoad 的空白值:/