【问题标题】:Node.JS V8 heap growing quickly even though usage remains the sameNode.JS V8 堆快速增长,即使使用量保持不变
【发布时间】:2014-03-27 17:42:23
【问题描述】:

我正在运行一个 Node.JS Web 应用程序,它可以正常运行几个小时,然后在某个随机时间点,V8 堆突然开始无缘无故快速增长,大约 40 分钟后,这种增长通常会停止并且进程继续正常运行。

我正在用 nodetime 监控这个:

这可能是什么原因?是我的程序中的内存泄漏还是 V8 中的错误?

【问题讨论】:

  • 我也看到了。我一直在为我制作的应用绘制 process.memoryUsage() 的输出,这就是它的样子:i.imgur.com/TxvMSwu.png

标签: node.js v8


【解决方案1】:

无法通过您提供的内容知道问题是什么,但有 99.99% 的可能性是问题在您的代码内部/可修复。

我发现用于调试 Node.js 内存问题的最佳工具是 https://github.com/bnoordhuis/node-heapdump,您可以将其设置为转储某个时间间隔,或者默认情况下它侦听 USR2 信号,因此您可以发送 kill -s USR2到您的进程的 pid 并获取快照。

然后您可以使用 Chrome Inspector 将堆加载到它的分析工具中并开始检查。

我通常发现问题在于长时间保持外部请求。

【讨论】:

  • 该死,我当前的服务器似乎没有足够的内存来创建完整的快照,但我会将此标记为答案,因为来自测试快照的数据看起来确实非常有用。跨度>
  • 我发现heapdump只有300 MB,尽管内存使用量是1.4 GB,所以我将不得不尝试其他方法。
  • 转储的大小不等于内存使用的大小。我会做一个 28MB 文件大小的转储,但内存使用量超过 200MB,您正在寻找的是已经变得太大或仍有太多实例化的对象。
  • 是的,但是 process.memoryUsage() 显示总堆大小和使用率之间的差异相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
  • 2021-08-03
  • 2012-09-25
  • 1970-01-01
  • 2017-03-11
相关资源
最近更新 更多