【问题标题】:Memory leak node js内存泄漏节点js
【发布时间】:2015-10-18 19:17:11
【问题描述】:

我的 nodejs 应用程序出现内存泄漏。为了恢复应用程序的目的,它是一个由iOS应用程序和后台调用的api来管理一些内容。 该应用程序正在生产中,由于使用,我们遇到了一些内存泄漏。

服务器上的内存一直在上升,从不下降。 我尝试使用 node-heapdump 分析问题。

首先,我看到 node-heapdump 给出的快照的堆大小与应用程序在内存中占用的大小(堆大小 ~ 30Mb 和 RAM 大小 ~ 100Mb)之间存在很大差异,差异来自从?

然后我看到堆大小的增量只是通过刷新一个不返回任何内容的主页。 有人知道我的问题可能出在哪里吗?

有关信息,我使用 nodejs 版本 0.10.x 和 expressjs 4.0.0

提前谢谢各位。

编辑

我安装了 memwatch-next 并引发了泄漏事件。 我的错误是这个:

警告:检测到可能的 EventEmitter 内存泄漏。 11 个泄漏监听器 添加。使用emitter.setMaxListeners() 增加限制。

我尝试设置 defaultMaxListeners,但是当我强调应用程序时,会在一段时间后引发泄漏事件。 有谁知道这个错误是什么意思?

【问题讨论】:

  • 什么都不返回的首页?
  • 对于任何我的意思不是 json 结果或类似的东西。因此,内存增加并不是因为为对象分配了新的内存。

标签: node.js memory express


【解决方案1】:

尝试从https://www.npmjs.com/package/memwatch查找内存泄漏泄漏和stat。

希望对您有所帮助。

【讨论】:

  • 我尝试通过 npm 安装 memwatch 但它失败了。 memwatch@0.2.2 安装脚本“node-gyp rebuild”失败。 npm 错误!这很可能是 memwatch 包 npm ERR 的问题!不是 npm 本身。你有同样的问题吗?
  • 你必须安装 python 才能使用 mematch,因为它使用一些 os apis 来获取数据。确保你设置了环境变量,以便 python 命令可以从任何地方运行。
  • 这仍然不起作用。无论如何,memwatch 不会给我更多关于 node-heapdump 的信息,因为它们都显示了堆大小和重新分区。无论如何感谢您的回复
  • @MartinStievenart 全局安装 node-gyp 包,它将解决安装问题。
【解决方案2】:

看看 memwatch-next

我在使用 memwatch 包时遇到了类似的问题,然后切换到 memwatch-next,它安装时没有出现 node-gyp 错误,并且可以正常工作。至于 RSS 和 heapdump 的区别,我和你是一样的。

【讨论】:

  • 谢谢,memwatch-next 模块确实有效。我将编辑我的帖子以放置我的结果。
  • 我使用 memwatch-next 和 heapdump 在发生泄漏事件时拍摄内存快照,以便我可以在 chrome 中加载这些快照文件并查找消耗更多内存的对象,但我无法准确诊断这些对象在我的代码中的使用位置,因为它显示了具有最高计数的字符串对象。诊断快照的任何运气。
【解决方案3】:

我认为你需要这个工具:easy-monitor

【讨论】:

    【解决方案4】:

    我是否建议您尝试使用 --inspect 参数运行应用程序,这将允许您附加 Chrome 开发工具并拍摄内存快照。从这里开始,在测试期间获取一个,然后在完成应用程序测试后获取一个(不再向应用程序发出请求,但必须仍在运行。)这将让您了解究竟是什么导致了内存增长。

    从这里您将能够看到导致增长的原因,并希望指出泄漏的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-10
      • 2020-11-15
      • 1970-01-01
      • 2022-11-22
      • 2022-01-08
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多