我有一个使用工作流和Foreach -Parallel -ThrottleLimit 15
的脚本,如果循环中的代码很简单,比如写输出或者一些基本的数学和睡眠语句,但是当我交换实际的逻辑时(更新)特定客户的产品)它同时运行5。
不幸的是,我无法发布完整的源代码,但是在更高的层次上,更新过程偶尔从一些配置文件读取,写入日志文件(每个线程的单独日志),读取/写入几个数据库,没有使CPU / RAM / IO达到最大值或任何其他值,据我们所知,这些资源上的线程之间不会发生争用。
我们研究过的事情:
我不知道还有什么地方可以解决这个问题。起初我们认为ThrottleLimit可能是最大值,实际数量是基于资源的动态,但我们的有限测试似乎表明即使CPU和内存非常高,它也会使用完整的15。此外,第一次迭代的上限为5,早在任何资源实际被大量使用之前(在更新脚本中有15分钟的start-sleep
因为我们允许警告我们的用户在继续关闭数据库以进行更新之前完成他们正在做的事情。)
有没有人能够深入了解我们可以查看或研究的其他可能导致此问题的内容?我们以前的并行逻辑是使用Jobs,我希望避免回到那个逻辑,因为它看起来应该完全正常。