有限的powershell启动工作

时间:2014-11-20 22:56:23

标签: powershell parallel-processing start-job

我很好奇你是否可以回答这个问题或指出我正确的方向。

我编写了一个测试/监控网址的脚本。我没有发布代码(除非你想要我),因为代码中没有错误。它很棒。我甚至可以将scriptblock作为开始工作的一部分运行。我遇到的问题似乎是我不能再次运行3个以上的工作......或者他们会挂起。我不确定为什么会这样。我可以运行它总共15个网址限制为3,它很棒。如果我尝试在15个网址上运行它,其中4个作为我的运行限制,它们将会挂起......我可以一次杀死一个..直到只剩下3个并且那些将完成。所以我似乎只能启动总共3个powershell实例或挂起。任何人解释为什么这是?我的所有搜索引导我查看如何节流的页面,这不是我的问题。


观察进程,每个消耗大约25MB的内存并且闲置在那里......如果我杀了一个,另外3个将开始使用cpu并且进程可能达到30MB的内存并终止完成。系统有8GB的内存和四芯线I5-2400 CPU @ 3.10GHz。按要求......

Param(
$file
)
$testscript =
{
Param(
[string]$url,
#[ValidateSet('InternetExplorer','Chrome','Firefox','Safari','Opera', IgnoreCase = $true)]
[string]$browser="InternetExplorer",
[string]$teststring="Solution Center",
[int]$timeout=20,
[int]$retry
)
$i=0
do {
$userAgent = [Microsoft.PowerShell.Commands.PSUserAgent]::$browser
$data = Invoke-WebRequest $url -UserAgent $userAgent -TimeoutSec $timeout
$data.Content
$findit = $data.Content.Contains($teststring)
$i++
If ($findit){
break
}
}
while ($i -lt $retry)

if(!$findit) {
Echo "opcmsg a=PSURLCheck o=NHTSA msg_t='$teststring was not found on $url or $url failed to load'"

}
}
$urls = Import-Csv $file | % {

Start-Job -ScriptBlock $testscript -ArgumentList $_.url, $_.browser, $_.teststring, $_.retry

}
While (@(Get-Job | Where { $_.State -eq "Running" }).Count -ne 0)
{  Write-Host "Processing URLs..."
   Get-Job
   Start-Sleep -Seconds 5
}
$Data = ForEach ($Job in (Get-Job)) {
   Receive-Job $Job
   Remove-Job $Job
}
$data | select *

所以我使用了新的system.net.webclient,我甚至尝试用[System.Collections.Queue]做这个...但是所有三种方法都使用了Jobs ...所以看来..我不能任何时候都要开三个以上的工作岗位。

1 个答案:

答案 0 :(得分:0)

你确定你的代码没问题吗?如果您多次调用单独的powershell会话,则可以非常快速地使用内存。检查进程监视器是否有高CPU或内存使用率,并确保块正在终止。或者发布代码。