【问题标题】:Node app eating memory incrementally over time节点应用程序随着时间的推移逐渐消耗内存
【发布时间】:2018-01-14 21:01:46
【问题描述】:

我刚刚在 DigitalOcean 上启动了两个 Express 服务器以及一个 mongodb 实例。我正在使用 PM2 让它们都运行。

当我使用 htop 查看内存使用情况时,总使用量通常在 220-235mb 左右(总共 488mb)。我唯一能看到的变化是我认为是缓冲内存的蓝条,实际使用的绿色内存似乎总是差不多。

然而,我查看 DO 的图表,在过去 24 小时内,内存图表一直在缓慢上升,例如每小时总量的 0.5%,有时它会下降,但总体而言它在上升,目前它一直在徘徊大约 60-65% 的总内存持续几个小时。

这些节点 Web 服务器上几乎没有流量,但内存一直在缓慢增加。所以我的问题是,这可能是我的一台服务器中的内存泄漏,还是 v8 引擎的本质是逐步扩展其内存?

【问题讨论】:

  • 我知道这是一篇旧帖子,但是你有没有在你的应用程序中发现真正的内存泄漏?还是 PM2 是问题的一部分?我正在使用 PM2 管理一组分叉应用程序(运行单个节点应用程序代码库),我可以看到内存增长如此缓慢......似乎有一些一般的“清理”,但总体而言它稳步增长。如果它真的很高,我正在使用 PM2 内存阈值自动/优雅地重新启动。我可能只是收集更多的事实,让它运行一个月,看看它有多高。
  • @tamak - 我的回复有点晚了,但它每天都在上升,然后又下降了。它一直这样做,所以我认为这只是垃圾收集。它从未崩溃!

标签: node.js express memory-leaks v8 digital-ocean


【解决方案1】:

如果您正在考虑内存泄漏,那么为什么不通过编写 2-3 个时间差为 2-3 小时的堆转储来检查您的理论。那么你就可以肯定地回答你的问题了。

您可以使用this module 在磁盘上写入堆转储,然后使用 Chrome 开发者工具进行简单的比较。此外,您将看到堆中的确切内容。

仅供参考:snapshots comparison from official documentation

【讨论】:

    猜你喜欢
    • 2011-11-14
    • 2018-06-17
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多