gpt4 book ai didi

javascript - Node.js 中的 ENOMEM 由高虚拟内存使用率引起

转载 作者:行者123 更新时间:2023-12-01 16:25:43 27 4
gpt4 key购买 nike

几个月来,我的生产 Node.js (v12) 应用程序一直出现 ENOMEM 错误。

这个问题特别难以诊断,因为我的堆总是在 100MB 范围内并且不会随着时间的推移而增加。因此不太可能发生 Node 内存泄漏。

但是,有时 VIRT 内存使用量(由 top cmd 报告)高达 15-20GB,这时 Node 开始抛出一些“spawn: enomem”错误。

据我所知,即使堆稳定在 100MB, Node 也会保留大量虚拟内存。而且我无法诊断它是什么,因为 Node 启动工具只允许我检查堆。

我在这个问题上花了将近 100 个小时,所以任何见解/帮助都将不胜感激!

我试过:

  • 手动设置 --max-old-space-size
  • 增加服务器上的 RAM
  • 将 SWAP 添加到我的服务器并允许 docker 使用该 SWAP
  • 使用 chrome 开发工具检查 Node 堆
  • 为我的 docker 容器设置内存限制
  • 转移到不同的进程管理器(pm2 而不是 supervisord)
  • 升级我所有的包并使用最新的 LTS 版本的 Node
  • 阅读并理解 Node ENOMEM 的所有谷歌搜索结果
  • 了解 Node 如何管理其内存池,尤其是关于堆和 GC。
  • 深入了解虚拟内存、保留内存、交换内存和共享内存的 Linux 内核概念。

感谢您的帮助!

最佳答案

我们设法解决了这个问题。请记住,解决方案可能特定于我们自己的项目。

在大型 (20k+) 文件上使用带有“imagemin-jpegtran”和“imagemin-pngquant”的包“imagemin”并等待所有 promise 以 promise 完成时,我们设法始终如一地重现错误。全部()。VIRT 内存使用量飙升至 20GB+,并且在执行后从未被释放。

我们的解决方案是使用 plimit将并发 promise 的数量限制为 5 或 10。在相同数量的图像 (20k+) 上,VIRT 内存使用率从未上升,RES 也没有上升,我们不再出现 ENOMEM 错误。

希望这对外面的人有帮助 🙂

关于javascript - Node.js 中的 ENOMEM 由高虚拟内存使用率引起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62005103/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com