繁体   English   中英

Powershell内存和CPU使用率

[英]Powershell Memory and CPU Usage

我见过-http://technet.microsoft.com/zh-CN/library/hh849832.aspx

而且,我已经看到: 如何在Powershell脚本中获取特定进程消耗的CPU使用率和内存

我知道我可以发送:Get-process tomcat * | Powershell内部的选择对象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

谢谢,

肯特

您的CPU部分无法正常工作的原因是您正在将其通过管道传输到Format-Table(使用FT别名)。 转到$cpuse =行的末尾并删除| ft -AutoSize | ft -AutoSize 一旦这样做,它便会按预期工作。 我还建议像Greg一样将流程过滤移至计数器。

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

如果脚本的其余部分正常工作,我将假设您有权读取计数器信息。

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

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

如果有多个tomcat进程,则必须拆开CounterSamples集合,但它应该可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM