1

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

我编写了一个测试/监控 url 的脚本。我没有发布代码(除非您希望我发布),因为代码中没有错误。它工作得很好。我什至可以将它作为启动作业的一部分运行脚本块。我遇到的问题似乎是我一次不能运行超过 3 个工作......或者他们挂起。我不确定这是为什么。我总共可以运行 15 个限制为 3 个的 url,这很棒。如果我尝试在 15 个 url 上运行它,其中 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......所以看起来......我不能运行超过三人同时开始工作。

4

1 回答 1

0

你确定你的代码没问题?如果您多次调用单独的 powershell 会话,内存可能会很快被消耗掉。检查进程监视器是否有高 CPU 或内存使用率,并确保您的块正在终止。或者贴出代码。

于 2014-11-20T23:12:22.437 回答