首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点-在生成子进程时获取ENOMEM错误

节点-在生成子进程时获取ENOMEM错误
EN

Stack Overflow用户
提问于 2021-12-30 08:35:26
回答 1查看 998关注 0票数 0

我在一个带有has 5120 CPU8192 Memory的AWS机器上运行Node 14。有时,在重载运行(使用imagemin压缩大量图像或使用S3同步将文件从S3复制到本地计算机)时,会出现ENOMEM错误。

这将导致ECS实例崩溃。

S3同步命令通过child_process派生执行,而imagemin包也生成子进程以压缩图像。两个错误都显示在下面。

代码语言:javascript
复制
(node:23) UnhandledPromiseRejectionWarning: Error: spawn ENOMEM
    at ChildProcess.spawn (internal/child_process.js:403:11)
    at spawn (child_process.js:553:9)
    at new SpawnTimeout (/app/src/utils/SpawnTimeout.ts:33:25)
    at s3Cp (/app/src/utils/s3.utils.ts:62:24)
    at copyFile (/app/src/utils/s3.utils.ts:52:10)
    at executeImageCompression (/app/src/processors/Processor.ts:63:9)

我尝试增加ECS资源,并添加自定义-max-old-space-size,但是没有帮助。

我看到了这个后Node.js catch ENOMEM error thrown after spawn

但是我不能在码头上配置--memory-swap参数,因为部署是由其他人控制的。

请告诉我如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2021-12-30 09:21:00

内存分配给您调用的每个child_process.spawn()。据我所见,imagemin调用child_process.spawn()的次数可能超过计算机所能处理的次数,从而导致nodejs分配的内存比计算机分配给新生成的child_processes的内存多,从而导致ENOMEM错误。或者是进程占用了太多的内存。这只是我的猜测,因为我看不见密码。

您可以尝试减少或限制生成的新child_processes的数量。

同样,这个解决方案纯粹是推测性的,因为我没有访问您的代码的权限,所以如果您可以将它添加到您的问题中将是有帮助的。

此链接可能进一步帮助您:How can I limit the number of child proccesses in imagemin?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70529220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档