【发布时间】: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