启动睡眠内存泄漏(或导致powershell内存泄漏)?
这个问题是来自 我没有得到一个有效的答案,所以如果这个论坛可以帮助的话,试试看。这妨碍了我的工作 这是我的两个powershell脚本。第一个是创建事件源,第二个是使用4个线程生成事件。在每个线程中使用启动睡眠来控制事件生成速率。如果我删除启动睡眠,则powershell内存使用量是恒定的,否则它会快速增长,直到所有系统内存都被使用,并且系统变得非常缓慢 这是一个已知的问题吗?有解决办法吗?谢谢你提供任何线索启动睡眠内存泄漏(或导致powershell内存泄漏)?,powershell,Powershell,这个问题是来自 我没有得到一个有效的答案,所以如果这个论坛可以帮助的话,试试看。这妨碍了我的工作 这是我的两个powershell脚本。第一个是创建事件源,第二个是使用4个线程生成事件。在每个线程中使用启动睡眠来控制事件生成速率。如果我删除启动睡眠,则powershell内存使用量是恒定的,否则它会快速增长,直到所有系统内存都被使用,并且系统变得非常缓慢 这是一个已知的问题吗?有解决办法吗?谢谢你提供任何线索 # use this script to create channel and sou
# use this script to create channel and source if they does not exist.
$logName = "TestLog"
$sourceName = "TestSource"
New-EventLog -LogName $logName -Source $sourceName
# maximumSize's max is 4G.
Limit-EventLog -LogName $logName -OverflowAction OverWriteOlder -RetentionDays 30 -MaximumSize 3080000KB
事件生成脚本:
# use this script to generate events in TestLog channel.
Param(
[int]$sleepIntervalInMilliSeconds = 0
)
$eventGenScript = {
$logName = "TestLog"
$sourceName = "TestSource"
while($true) {
Write-EventLog -LogName $logName -Source $sourceName -Message "perfLog" -EventId 0 -EntryType information
Start-Sleep -ms $sleepIntervalInMilliSeconds
}
}
$threadCount = 4
for($i=0; $i -lt $threadCount; $i++)
{
Start-Job $eventGenScript
}
read-host "type a key to exit. You need to wait for some time for threads to exit."
这并不是说
Start Sleep
有内存泄漏,您使用无效参数(-ms
)调用它,并且作业的进程内存中充满了错误消息,因为您在无限循环中不断调用(invalid)语句
演示:
PS C:\> Start-Sleep -ms 100
Start-Sleep : A parameter cannot be found that matches parameter name 'ms'.
At line:1 char:13
+ Start-Sleep -ms 100
+ ~~~
+ CategoryInfo : InvalidArgument: (:) [Start-Sleep], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.StartSleepCommand
您有三种选择来处理此问题:
- 在脚本块内定义变量:
PS C:\> $job = Start-Job -ScriptBlock { >> $ms = 100 >> $ms >> Start-Sleep -Milliseconds $ms >> } >> PS C:\> $job | Wait-Job | Receive-Job 100
- 将变量作为参数传递到scriptblock中:
PS C:\> $ms = 100 PS C:\> $job = Start-Job -ScriptBlock { >> param($ms) >> $ms >> Start-Sleep -Milliseconds $ms >> } -ArgumentList $ms >> PS C:\> $job| Wait-Job | Receive-Job 100
PS C:\>$ms=100 PS C:\>$job=开始作业-脚本块{ >>参数($ms) >>$ms >>开始睡眠-毫秒$ms >>}-ArgumentList$ms >> PS C:\>$job |等待作业|接收作业 100
底线:更换
Start-Sleep -ms $sleepIntervalInMilliSeconds
开始睡眠-ms$sleepIntervalInMilliSeconds
与
启动睡眠-毫秒$使用:sleepIntervalInMilliSeconds
问题将消失。并不是因为
开始睡眠
有内存泄漏,而是您使用无效参数(-ms
)调用它,并且作业的进程内存充满了错误消息,因为您在无限循环中不断调用(无效)语句
演示:
PS C:\> Start-Sleep -ms 100
Start-Sleep : A parameter cannot be found that matches parameter name 'ms'.
At line:1 char:13
+ Start-Sleep -ms 100
+ ~~~
+ CategoryInfo : InvalidArgument: (:) [Start-Sleep], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.StartSleepCommand
您有三种选择来处理此问题:
- 在脚本块内定义变量:
PS C:\> $job = Start-Job -ScriptBlock { >> $ms = 100 >> $ms >> Start-Sleep -Milliseconds $ms >> } >> PS C:\> $job | Wait-Job | Receive-Job 100
- 将变量作为参数传递到scriptblock中:
PS C:\> $ms = 100 PS C:\> $job = Start-Job -ScriptBlock { >> param($ms) >> $ms >> Start-Sleep -Milliseconds $ms >> } -ArgumentList $ms >> PS C:\> $job| Wait-Job | Receive-Job 100
PS C:\>$ms=100 PS C:\>$job=开始作业-脚本块{ >>参数($ms) >>$ms >>开始睡眠-毫秒$ms >>}-ArgumentList$ms >> PS C:\>$job |等待作业|接收作业 100
底线:更换
Start-Sleep -ms $sleepIntervalInMilliSeconds
开始睡眠-ms$sleepIntervalInMilliSeconds
与
启动睡眠-毫秒$使用:sleepIntervalInMilliSeconds
问题就会消失。发生这种情况时,内存分配在哪里?有多少进程正在运行?发生这种情况时,内存分配在哪里?有多少进程正在运行?