【问题标题】:PowerShell WQL from different sources performance来自不同来源的 PowerShell WQL 性能
【发布时间】:2017-10-30 14:26:09
【问题描述】:

具有以下 WQL 查询,它们运行良好。

$avg = Get-WmiObject win32_processor -computername $computername | 
               Measure-Object -property LoadPercentage -Average | 
               Foreach {$_.Average}

$tcat = Get-WmiObject Win32_PerfFormattedData_PerfProc_Process -computername $computername |
               Where-Object {$_.Name -like "*tomcat*"} |
               Sort-Object PercentProcessorTime -Descending |
               select -First 1

$mem = Get-WmiObject win32_operatingsystem -ComputerName $computername |
               Foreach {"{0:N2}" -f ((($_.TotalVisibleMemorySize - $_.FreePhysicalMemory)*100)/ $_.TotalVisibleMemorySize)}

已经将这些结果记录到 SQL 数据库超过一周了。

第一个具有 70% 的“整体”CPU 使用率和 98% 的进程 CPU。 这是否意味着 98% 的 70% 使用率或 98% 的系统 CPU?

这让我有点困惑。

【问题讨论】:

    标签: powershell wmi wql


    【解决方案1】:

    您的 Process_CPU 列由 WMI 的“处理器时间百分比”字段中的数据填充。 “百分比处理器时间”衡量的是处理器在非空闲线程上花费的时间量(从技术上讲,它计算线程 空闲的时间量,然后将其作为百分比减去100)。

    由于您正在测量 Tomcat,我想您是在网络服务器上测量它。这就是说 98% 的时间,Tomcat 都在非空闲状态下运行(意味着它正在做一些事情,比如处理请求或为网站提供服务)。

    为了更具体地回答您的问题,而不是您的 PROCESS_CPU 列测量 70% 的 98%,而是测量 98% 的时间 >0% 的使用率。

    【讨论】:

    • 对.. 所以当您查看任务管理器时,您会看到按进程划分的 CPU 百分比,这就是为什么 Win32_PerfFormattedData_PerfProc_Process 我知道 win32_processor 是整体的.. 我真的需要进程作为一部分CPU。
    • 如果我正确阅读了您的回复,Tomcat8 占用了整个 CPU 的 68%?
    • 您的第一列 (CPU) 是 tomcat 使用的 CPU 的平均值,因此您可以肯定地说 tomcat 平均使用 70% 的 CPU。第二列几乎可以被认为是“Tomcat 正常运行时间”,因为它测量的是完成该过程所需的时间。 Tomcat 永远不会“完成”,因为它会不断运行,因此 98% 的“正常运行时间”对于该进程来说是有意义的。
    • 可能会给您带来意想不到的结果@Leptonator 的一件事是,当 CPU 利用率超过 100% 时,WMI 往往会出错。 Tomcat 可以使用与机器上一样多的 CPU,因此如果您有 4 个 CPU,Tomcat 理论上可以使用高达 400% 的 CPU。一种更好的方法可能是使用“Get-Process”cmdlet 并将输出存储在 CSV 中,然后根据 CSV 结果计算平均 CPU 使用率。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    相关资源
    最近更新 更多