3

我正在关注一个使用 Node JS 构建的应用程序,它会产生一些有趣的问题。它最初在 Node JS v0.3.0 上运行,我已经升级到 v0.10.12。我们正在使用 Node JS 在服务器上渲染图表,并且我们注意到内存使用量不断攀升图表。

Q1:我一直在监控 Node JS 进程顶部的 RES 列,这是正确的还是应该监控其他内容?

我一直在将变量设置为 null 以尝试将内存重新分配回系统资源(我在某处读到此作为解决方案),它只产生了细微的差别。

我已将应用程序一直推到 1.5gb,然后它停止运行,并且该过程似乎没有终止。没有我发现奇怪的错误消息。

Q2 : 还有什么我可以做的吗?

谢谢史蒂夫

4

2 回答 2

1

这是版本的巨大飞跃。您可能想分享您可能为使其在最新稳定版上运行所做的代码更改。api 与 v0.3 中的不同,因此这可能是问题的一部分。

如果不是,那么您看到的问题更有可能来自堆碎片而不是实际泄漏。在后来的 v8 版本中,垃圾收集更加自由,通过清理来提高性能。(有关此问题的一些讨论,请参见http://code.google.com/p/chromium/issues/detail?id=112386 )

您可以尝试运行--max_old_space_size=32将 v8 可以使用的内存量限制在 32MB 左右的应用程序。请注意文档说“老一代的最大大小”,所以它不会正好是32MB。就在它附近,因为缺乏更好的技术解释。

您还可以使用 跟踪外部内存使用量--trace_external_memory。这将使您知道外部存储器(即缓冲区)是否保留在您的应用程序中。

您注意到大约 1.5GB 的应用程序会告诉我您可能在 64 位系统上。您只提到它停止运行,但没有注意到 CPU 在此期间是否在旋转。此外,由于我没有示例代码,我不确定是什么原因导致这种情况发生。

我会尝试运行最新的开发(v0.11.3在撰写本文时),看看问题是否已解决。正在进行许多性能/内存增强,这可能会帮助您解决问题。

于 2013-07-01T06:23:44.110 回答
0

我猜你在某处有内存泄漏(以闭包的形式?),将(不再使用?)图表(?)保留在内存中的某处。

当涉及到大于 1 GB 的内存时,v8 有时需要进行一些调整。试用--noincremental_marking和/或--max_old_space_size=81920000(如果您有 8 GB 可用空间)。

检查更多选项node --v8-options并通过--trace*-parameters 找出减慢/停止节点的原因。

于 2013-07-01T06:55:26.953 回答