【问题标题】:Powershell Memory and CPU UsagePowershell 内存和 CPU 使用率
【发布时间】:2014-09-12 18:05:28
【问题描述】:

我见过-http://technet.microsoft.com/en-us/library/hh849832.aspx

而且,我见过:How to get CPU usage & Memory consumed by particular process in powershell script

我知道我可以发送:Get-process tomcat*| Powershell 内的 Select-Object CPU

我看到的最大问题是 CPU 没有在本地或远程返回......

我已经整理了以下脚本.. CPU 部分现在正在工作..

writeHtmlHeader $TomcatMemFileName
writeTableHeader $TomcatMemFileName

[int]$i = 1
foreach ($server in Get-Content $serverlist)
{
$Computer=$server.split(",")[0]
$ip=$server.split(",")[1]
IF ( $Computer -notmatch 'DB' ) {
  $procs = Gps tomcat* -ComputerName $Computer
   foreach ($proc in $procs){
    $id = $proc.ID
    $machine = $proc.MachineName
    $process = $proc.ProcessName
    $WorkingSet = [int64]($proc.WorkingSet64/1024)
    $VirtualMem = [int]($proc.VM/1MB)
    $cpuse= Get-Counter -computername $machine '\Process(tomcat6)\% Processor Time' | Select-Object -ExpandProperty countersamples | Select-Object -Property cookedvalue
    foreach ($cpus in $cpuse){
        $cpu=$cpus.cookedvalue
        write-host $TomcatMemFileName $i $machine.ToUpper() $id $process $WorkingSet $VirtualMem $cpu
        writeTomcatInfo $TomcatMemFileName $i $machine.ToUpper() $id $process $WorkingSet $VirtualMem $cpu
    }
}
}
 $i++
}

writeTablefooter $TomcatMemFileName
writeHtmlFooter $TomcatMemFileName

谢谢,

肯特

【问题讨论】:

  • 刚刚更新了可以正常工作的代码!谢谢@TheMadTechnician

标签: powershell memory cpu


【解决方案1】:

您的 CPU 部分不工作的原因是您将它传送到 Format-Table(您使用 FT 别名)。转到$cpuse = 行的末尾并删除| ft -AutoSize。一旦你这样做了,它应该像你期望的那样工作。我还建议像 Greg 一样将流程过滤移到柜台。

$cpuse= Get-Counter -computername $machine '\Process(tomcat*)\% Processor Time' | Select-Object -ExpandProperty countersamples | Select-Object -Property cookedvalue

【讨论】:

    【解决方案2】:

    如果脚本的其余部分有效,我将假设您有权读取计数器信息...

    为什么不在计数器中指定进程名称,这样您以后不必搞乱所有过滤。例如:

    $counter = Get-Counter '\Process(tomcat*)\% Processor Time' -ComputerName $myServer
    $counter.CounterSamples.CookedValue
    

    如果有多个 tomcat 进程,您将不得不拆开 CounterSamples 集合,但它应该可以正常工作。

    【讨论】:

    • 不工作.. Get-Counter : The \\SERVER\\Process(tomcat*)\% Processor Time performance counter path is not valid. At D:\WORK\ps\tomcat_memory.ps1:130 char:27 + $counter = Get-Counter <<<< -ComputerName $machine '\Process(tomcat*)\% Processor Time' + CategoryInfo : InvalidResult: (:) [Get-Counter], Exception + FullyQualifiedErrorId : CounterPathIsInvalid,Microsoft.PowerShell.Commands.GetCounterCommand
    • 您是否偶然使用了 PowerShell 2.0? PowerShell 3+ 允许您在计数器中使用通配符。否则,您必须使用不带引号的“tomcat”、“tomcat#1”、“Tomcat#2”等内容来获取每个进程的统计信息。
    • 对脚本进行了更改以满足我们的需求:'\Process(tomcat6)\% Processor Time'
    猜你喜欢
    • 2014-05-07
    • 2011-09-11
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多