3

我有一个使用工作流的脚本Foreach -Parallel -ThrottleLimit 15,如果循环内的代码很简单,比如写输出或一些基本的数学和睡眠语句,它工作正常,但是当我交换实际逻辑(为特定客户端更新产品)时,它会限制在5同时运行。

不幸的是,我无法发布完整的源代码,但在较高级别上,更新过程偶尔会从一些配置文件中读取,写入日志文件(每个线程的单独日志),读取/写入几个数据库,没有什么会导致CPU / RAM / IO 最大化或任何东西,据我们所知,线程之间没有关于这些资源的争用。

我们调查过的事情:

  • Powershell 3 的硬限制为 5(我们使用的是 Powershell 5,当用简单的数学和写入输出替换实际工作时,一次能够运行超过 5 个)
  • CPU/RAM/磁盘 IO 看起来都非常稳定(没有达到最大值或峰值很多)
  • 查找有关此参数的 MS 文档(可用的不多,也没有提及我见过的任何奇怪行为)

我不知道在哪里可以解决这个问题。起初我们认为 ThrottleLimit 可能是一个最大值,实际数字是根据资源动态变化的,但我们有限的测试似乎表明它使用了完整的 15,即使 CPU 和内存非常高。此外,第一次迭代的上限为 5,远在任何资源实际被大量使用之前(start-sleep更新脚本中立即有 15 分钟,因为我们允许警告用户完成他们正在做的事情,然后再继续取下数据库进行更新。)

有没有人知道我们可以检查或调查的其他可能导致这种情况的原因?我们之前的并行逻辑使用的是 Jobs,我想避免在看起来应该可以正常工作时返回该逻辑。

4

0 回答 0