首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Node垃圾什么时候收集?

Node垃圾什么时候收集?
EN

Stack Overflow用户
提问于 2022-07-17 03:52:10
回答 1查看 187关注 0票数 0

我在一个拥有256 VM内存的小型VM上运行了一个NodeJS服务器,并且我注意到,随着服务器接收到新的请求,内存使用量不断增加。我读到,小型环境的一个问题是Node不知道内存约束,因此直到很久以后才尝试垃圾收集(例如,它可能只想在达到512 it的已使用RAM时才开始垃圾收集),真的是这样吗?

我也尝试使用各种标志,如--max-old-space-size,但没有看到太多的变化,所以我不确定我是否有实际的内存泄漏,还是Node只是没有尽快GC?

EN

Stack Overflow用户

回答已采纳

发布于 2022-07-17 06:50:13

这可能不是一个完整的答案,但它来自于经验,并可能提供一些指点。NodeJS中的内存泄漏是大多数开发人员可能面临的最具挑战性的错误之一。

但在讨论内存泄漏之前,要回答您的问题--除非您显式地配置--max-old-space-size,否则就会有默认的内存限制。由于节点中的垃圾收集的某些阶段是昂贵的(有时是阻塞的)步骤,这取决于其可用内存的大小,因此它会延迟(例如,标记扫描收集)一些昂贵的GC周期。我已经看到,在一个拥有16 GB内存的机器中,它很容易让内存达到800 MB,然后才会发生重要的垃圾收集。但我相信这并不意味着800 MB的特别限制。这将真正取决于它有多少可用内存,以及您正在运行的应用程序类型。例如,如果您有一些复杂的计算、缓存(例如大DB连接池)或buggy日志库,它们本身总是占用很高的内存,这是完全可能的。

如果您正在监视NodeJs的内存占用(在服务器启动后的某个时间),所有的东西都会开始升温(快速加载所有模块并创建一些启动对象、缓存预热以及所有高内存消耗模块都处于活动状态),可能会出现内存泄漏的情况,因为内存会不断上升,有时甚至高达1GB。然后,您将看到它稳定下来(在

但有时会有实际的内存泄漏(如果没有具体的模式,就很难发现)。

在您的示例中,256 MB似乎只满足nodejs的最低RAM要求,可能还不够。在开始担心内存泄漏之前,您可能需要将其压缩到1.5GB,然后监视所有内容。

关于NodeJS的内存模型和内存泄漏的一些好资源。

一些帮助识别内存泄漏的调试工具

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

https://stackoverflow.com/questions/73009144

复制
相关文章

相似问题

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