【问题标题】:Downloading large files from a Google Cloud bucket in a BullMQ worker leads to stalls从 BullMQ worker 中的 Google Cloud 存储桶下载大文件会导致停顿
【发布时间】:2022-11-22 07:33:58
【问题描述】:

我使用 BullMQ 创建了一个作业调度程序/运行程序。我有一个工作人员,在处理工作时,从 Google Cloud Bucket 下载给定文件,然后对其进行分析。

但是,每当要下载的文件非常大(>10GB)时,下载可能需要几分钟时间并导致错误:“job stalled more than allowable limit”错误。

const GCS = new Storage();
await GCS.bucket(bucket).file(file).download({
    destination
});

这些工作人员被设置为“沙盒工作人员”,因此根据 docs 不应停止工作:

为了避免工作停滞,请确保您的工人没有 保持 Node.js 事件循环太忙,默认最大停止检查 duration 是 30 秒,所以只要你不执行 CPU 超过该值的操作你不应该得到停滞的工作。 另一种减少停滞作业机会的方法是使用所谓的 “沙盒”处理器。在这种情况下,工人将产生新的 独立的 Node.js 进程,与主进程分开运行。

根据Sandboxed Processors 的解释,停顿错误的根源似乎是由于 CPU 不堪重负......但是从 GCS 存储桶下载大文件甚至是 CPU 密集型操作吗?

由于这些工人在不同的进程中运行处理器,他们 不会像标准工人那样容易导致工作停滞, 尽管如果系统中的 CPU 是 超负荷以至于工人没有实际时间来执行 它的簿记是为了避免拖延。

任何意见,将不胜感激!

【问题讨论】:

  • 您可以尝试查看此 post 是否可以解决您的问题?

标签: node.js google-cloud-storage message-queue bull bullmq


【解决方案1】:

事实证明,对于非常大的文件下载,作业运行时间过长并注册为停滞(有关更多信息,请参阅https://docs.bullmq.io/bull/important-notes)。

修复是将“锁定持续时间”从默认的 30 秒增加到 5 分钟。

const worker = new Worker('my-queue', null, { lockDuration: 60000 });

【讨论】:

    猜你喜欢
    • 2021-10-04
    • 2014-10-25
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 2020-05-05
    • 2020-06-17
    相关资源
    最近更新 更多