【问题标题】:node.js 0.12.x memory usagenode.js 0.12.x 内存使用情况
【发布时间】:2015-07-07 00:47:57
【问题描述】:

尝试将我的应用程序从节点 0.10.x 升级到节点 0.12.x 系列时,我遇到了一个令人不快的意外:0.12 使用的 RAM 比 0.10 多 15%-20%。

从 io.js 问题页面上的 few threads 来看,似乎问题出在底层 v8 引擎上。

现在,软件更新很难卖给管理层。再加上需要支付更多的 VPS 硬件而几乎没有明显的好处,这对我们来说是一个交易破坏者。

有没有办法禁用 v8 添加的占用额外 RAM 的任何新功能?也许是吹捧的 CPU 分析东西?

我基本上是在寻找可以将内存使用量减少到与节点 0.10 附带的 v8 相当的水平的 v8 开关。

【问题讨论】:

  • io.js 在您的应用程序中与 0.10 相比如何?
  • 我只是尝试测试它,但遇到了一堆未解决的 npm 问题(node-gyp 不兼容)。那时我放弃了,即使我可以让它在这个测试系统上运行,它似乎也不是我可以在生产中依赖的东西。
  • 请考虑针对您在 io.js 中遇到的错误打开问题,我认为无论您获得超过 0.10 的性能,您都可以通过使用生成器而不是闭包来获得更快的异步操作。另外 - 你真的失去了性能还是仅仅失去了内存使用? (如,给定相同数量的可用系统内存 - 它是否也会减少 15% 的请求?)
  • 重写整个应用程序是不可行的。也许是未来项目的想法。很难判断性能。它不是面向公众的应用程序,因此没有像请求率这样的简单指标。但性能在 0.12 上似乎还不错。我们的大部分压力都在内存而不是 CPU 上,这就是它如此糟糕的原因。
  • 不幸的是,事实并非如此。我发现这个问题的方法是当 linux 内核开始杀死那些曾经在其 VPS 内存分配边缘附近工作的节点时。如果这里是预分配的缓存,v8 显然放不下。

标签: node.js performance memory


【解决方案1】:

您可以使用 --max-old-space-size 标志来限制 Node.js 进程使用的内存量。也许您可以将内存限制在可接受的范围内,然后对您的应用进行基准测试,看看它的性能是否可以接受。

node --max-old-space-size=512 myScript.js

我相信还有一些控制垃圾收集的标志可能值得探索。 this GitHub issue about v8 performance profiling etc. 可能也值得您花时间阅读。

【讨论】:

  • --max-old-space-size 开关用于将节点进程的最大内存增加到 512mb 以上。如果设置低于该值,它似乎没有做任何事情,即使它做了,我也看不出它会有什么帮助(除了导致崩溃)。我知道性能分析的东西,问题是相同的代码在不同的运行时使用不同数量的 RAM。所以 V8 本身有一些东西占用了额外的空间,而不是我可以分析的代码。
【解决方案2】:

如果您可以选择恢复 v.10,您可以使用 Node Version Manager NVM 轻松完成此操作。只需在旅途中切换到您喜欢的任何版本并使用它,同时等待 v.12 的修复。

【讨论】:

  • 我就是这么做的。不过,这不是我正在寻找的真正解决方案。
猜你喜欢
  • 1970-01-01
  • 2016-05-18
  • 1970-01-01
  • 2013-11-29
  • 2016-09-27
  • 1970-01-01
  • 2019-01-02
  • 2012-03-29
  • 1970-01-01
相关资源
最近更新 更多