繁体   English   中英

如果我没有收到,PowerShell会保留多少作业输出?

[英]How much job output will PowerShell hold if I don't receive it?

我有一个长期运行的PowerShell脚本工作流 ,使用-AsJob参数作为作业调用。 它会定期编写需要使用Retrieve-Job cmdlet检索的警告和输出消息。

我很好奇PowerShell存储了尚未检索到的作业输出以及是否存在实际上限。 如果是这样,它会以FIFO方式自动清除作业输出吗? 崩溃?

我不知道这是否真的回答了你的问题,但我尝试了各种Start-Job命令,它们只创建了一个从1到大数的范围 - 大多数都给出了一个内存不足的异常,但我终于找到了一个工作到完成:

# these all bombed out
Start-Job -ScriptBlock { 1..4000000000 }
Start-Job -ScriptBlock { 1..2000000000 }
Start-Job -ScriptBlock { 1..1000000000 }
# this one finally started evaluating
Start-Job -ScriptBlock { 1..100000000 }

我让它运行一段时间,它在评估范围时吃了一个完整的CPU核心。 根据任务管理器,它最终使用大约5GB的RAM,并且会使用更多,但此时开始耗尽物理内存。 CPU使用率下降,因为操作系统必须像疯了一样开始分页内存。

正如您在下面的屏幕截图中看到的,它实际上产生了另一个powershell.exe进程 - 所以我想这部分地回答了您在作业运行时将数据存储在何处的问题。 似乎存在一个实际限制,取决于可用资源。 PowerShell不会清除或以其他方式丢失作业缓冲区中的信息(除非第二个进程崩溃?)但是检索那么多数据也可能会有问题。 您可能希望进行一些试运行,并了解您的环境可以支持的可接受和实际限制。

注意:使用更小的范围,如1..100000,提供了足够多的记录来观察行为,同时不会完全压倒系统。 我使用较大的数字来查看实际限制是什么。

任务管理器使用大量内存显示powershell.exe

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM