【问题标题】:Nodejs memory leak, heapdump shows retainer showing "uncaught exception"Nodejs内存泄漏,heapdump显示保持器显示“未捕获的异常”
【发布时间】:2015-10-21 22:36:27
【问题描述】:

我的节点应用程序非常缓慢地泄漏内存。我仔细分析了每分钟生成堆转储并比较对象分配的所有内容。

一切似乎都很好,除了(数组)我有一个 24 字节的整个负载(并且数量不断增加)。保持器在“uncaughtException”中显示数组。在此处查看屏幕截图:

http://i.imgur.com/EJu6x82.png

对于我的一生,我无法弄清楚这意味着什么,上述任何帮助或演练都会非常感激。

谢谢

编辑:

澄清应用程序在大约一个小时后因 enomem 异常而崩溃。运行节点 0.12.7

编辑 2:

保持器显示 uncaughtException 的原因是由于该事件被附加到类中。我无法摆脱内存泄漏,我怀疑它在节点内的某个地方,但是我已经能够通过定期销毁和重建流来缓解它。

【问题讨论】:

  • 该屏幕截图仅显示该数组中的 240 个项目。你是如何断定你肯定有泄漏的?有各种各样的缓存和其他数据结构为了优化性能而消耗内存,但实际上并不是泄漏。如果你让事情运行足够长的时间,它们就会进入稳定状态。因此,您所做的工作是为了确保您确实存在泄漏,而不仅仅是一些工作内存随着系统的使用而增长到一定大小。
  • 一个小时左右后,应用程序因 enomem 而崩溃。上面的屏幕截图是在第一次运行之后。除了这些破旧的小阵列外,其他一切看起来都不错。
  • 请在您的问题中添加有关内存不足时崩溃的信息,因为这非常重要。我认为,如果我们不知道您的代码并且没有能力在堆快照中四处寻找以试图找出真正存在的内容,那么我们将很难对此进行诊断。
  • 我担心可能是这种情况。奇怪的是,缓冲区位于从流继承的类中的私有对象中,因此它甚至不是 my 代码。添加了关于崩溃的评论。谢谢你:)
  • 我看到了对流的引用。我想知道您是否可能正在泄漏流或某些包含流的对象,但对您的代码一无所知,我不知道这是否相关。

标签: node.js memory-leaks v8


【解决方案1】:

在这种情况下,我使用了这个库 (https://github.com/maxogden/multiplex),它泄漏了空数组 https://github.com/maxogden/multiplex/issues/31。

【讨论】:

    猜你喜欢
    • 2015-03-20
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2012-06-20
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多