微调 Get-Counter 脚本以加快执行速度
Posted
技术标签:
【中文标题】微调 Get-Counter 脚本以加快执行速度【英文标题】:Fine-tuning Get-Counter script for quicker execution 【发布时间】:2014-08-18 03:22:51 【问题描述】:下面是我获取单个 w3wp.exe 应用程序池的进程利用率的脚本,问题是每次迭代大约需要 2 秒,大约有 25 个应用程序池。您能否帮我微调以下脚本以加快执行速度。
gwmi win32_process -filter 'name="w3wp.exe"' | %
$name=$_.name
$cmd = $pattern.Match($_.commandline).Groups[1].Value
$procid = $_.ProcessId
$tmp = (Get-Counter "\Process(*)\ID Process").CounterSamples | Where-Object $_.CookedValue -eq $procid | select -expand Path
$calc = [regex]::match($tmp,'\(([^\)]+)\)').Groups[1].Value
$cooked = (Get-Counter "\Process($calc)\% Processor Time").CounterSamples | Where-Object $_.InstanceName -notlike '_total' | select -expand CookedValue
$cpuper = [Math]::Round( ($cooked/2), 0)
echo $cpuper
【问题讨论】:
【参考方案1】:看起来Get-Counter
的最小采样时间为 1 秒。导致每次调用的最短执行时间为 1 秒。最好的办法是把所有的计数器放在前面,然后寻找你感兴趣的计数器。
这与您正在做的事情类似。它在表格中打印进程 ID 和 % 处理器时间。
$proc = 'w3wp'
$samples = get-counter '\Process($proc*)\ID Process', '\Process($proc*)\% Processor Time' | select -expand countersamples
$samples | group Split-Path $_.Path | ft @ N='ID'; E=$_.Group[0].CookedValue , @ N='% Processor'; E=[Math]::Round($_.Group[1].CookedValue/2, 0)
【讨论】:
很棒的麦克,。非常感谢,它确实帮助我将 get-counter 的东西移出了循环,。从 58 秒到.. TotalSeconds : 2.5210095 TotalMilliseconds : 2521.0095以上是关于微调 Get-Counter 脚本以加快执行速度的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 脚本中同时使用多处理和多线程来加快执行速度
如何修改Smith和Waterman perl脚本以加快速度?