Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
小型powershell脚本占用大量内存_Powershell - Fatal编程技术网

小型powershell脚本占用大量内存

小型powershell脚本占用大量内存,powershell,Powershell,我用这个脚本捕获网络上的IP,与历史数据包捕获进行比较,作为更大的问题解决练习的一部分 function qp($comp) { $p = ping $comp -n 1 -w 2 -4 IF($? -eq $true){$out = $p[1].split("[")[1].split("]")[0]} else{$out = $False} return $out } $comps = Get-Content C:\PacketCapture\

我用这个脚本捕获网络上的IP,与历史数据包捕获进行比较,作为更大的问题解决练习的一部分

function qp($comp)
    {
    $p = ping $comp -n 1 -w 2 -4
    IF($? -eq $true){$out = $p[1].split("[")[1].split("]")[0]}
    else{$out = $False}
    return $out
    }

$comps = Get-Content C:\PacketCapture\comps.txt

DO
    {
    foreach($comp in $comps)
        {
        ECHO "$(qp $comp);$comp" >>"C:\PacketCapture\IP_$(Get-date -format HHmm-ddMMyy).txt"
        }
    Start-sleep 3600
    }
until($null -eq "WANG")
我在两周前就开始这样做了,上周中旬,它运行的终端因为power shell进程的内存使用量接近2GB而逐渐停止

我停止并重新启动了它,今天早上我们再次使用了1.2GB内存


虽然不是特别重要,但我已将其修改为运行一次,然后停止/启动自身,我想知道是哪个元素导致内存泄漏,以及将来如何识别它。

尝试使用
[System.GC]::Collect()将垃圾收集引入代码中。


来源:

您可以尝试手动调用垃圾回收。我认为
do
/
until
循环是一个很好的地方:

DO
    {
    foreach($comp in $comps)
        {
        ECHO "$(qp $comp);$comp" >>"C:\PacketCapture\IP_$(Get-date -format HHmm-ddMMyy).txt"
        }
    Start-sleep 3600
    [GC]::Collect()
    }
until($null -eq "WANG")

我可以看出情况更糟,但您是否尝试过使用
测试连接-安静
?它将消除对字符串操作的需要,尽管这应该会很快完成。另外,您运行此应用程序的PowerShell版本是什么。首先,comps.txt的大小是多少?第二,有cmdlet时为什么还要使用ping.exe?最后,您的do..till很有趣,但
while($true){…}
更常见。我同意其他人关于使用
测试连接的看法。也就是说,如果您在
[GC]::Collect()
中加入一个,可能是在
启动睡眠后的照看中?只是好奇这是否有帮助。请从sysinternals中尝试VMMap。它允许您查看一段时间内进程的内存使用模式。当内存为1.2GB时,您可以使用procdump(或procexp或taskmanager->右键单击->创建转储文件)进行内存转储,并使用WinDbg.fwiw对其进行分析-在删除启动睡眠的情况下,在我的计算机上运行此操作时,我没有注意到任何内存消耗/泄漏。您实际上应该包括链接中的代码。。。这是一条线。如果没有它,这是一个糟糕的答案。这是一个正确的答案,但是当链接消失时会发生什么呢?这是一个目前唯一的答案,这是不鼓励的。我的评论并不差。这是一种建设性的批评。但如果你在答案中写下15个字符并保留上下文链接,用户就不必费心去寻找任何东西。Jimbo感谢你的回答,Matt在技术上是正确的。堆栈溢出希望您在此处包含答案的关键,而不仅仅是通过链接。但是@Matt,Stack Overflow是协作性的,请随意编辑Jimbo的答案以包含相关细节。@Patrick我知道是的。我采取了“教人钓鱼”的方法。