【问题标题】:How do I tune node.js memory usage for Raspberry pi?如何调整 Raspberry pi 的 node.js 内存使用情况?
【发布时间】:2017-03-11 02:54:01
【问题描述】:

我在 Raspberry Pi 3 B 上运行 node.js,具有以下可用内存:

free -m
             total       used       free     shared    buffers     cached
Mem:           973        230        742          6         14        135
-/+ buffers/cache:         80        892
Swap:           99          0         99

如何将节点 (v7) 配置为不使用所有可用内存?为了延长 SD 卡的寿命,我想防止它去交换。

我知道--max_old_space_size

node --v8-options | grep -A 5 max_old
  --max_old_space_size (max size of the old space (in Mbytes))
        type: int  default: 0

我知道一些答案是特定于应用程序的,但是有哪些一般技巧可以限制 node.js 内存消耗以防止交换?也将不胜感激任何其他从 pi 中挤出更多可用内存的技巧。

我已经设置了内存分割,以便 GPU 至少分配了 16 兆的 RAM。

【问题讨论】:

    标签: node.js memory raspberry-pi v8 raspbian


    【解决方案1】:

    防止交换的唯一防弹方法是在操作系统中关闭交换(删除或注释掉/etc/fstab 中的任何交换行以进行永久设置,或使用swapoff -a 关闭当前会话的所有交换设备)。请注意,当没有可用内存可用时,内核会强制终止随机进程(无论有交换还是没有交换都是如此)。

    在 node.js 中,您可以限制 V8 托管堆的大小,而您已经提到的 --max-old-space-size 标志是执行此操作的主要方式。大约 400-500(兆字节)的值可能对您的 Raspberry 有意义。还有--max-semi-space-size,它应该很小,你可以坚持使用默认值,--max-executable-size 用于生成的代码(你需要多少取决于你运行的应用程序;我会坚持使用默认值)。

    也就是说,没有办法限制进程的整体内存使用量,因为托管堆之外还有其他内存消费者(例如 node.js 本身、V8 的解析器和编译器)。没有办法对各种内存使用设置限制。 (因为这样的限制会做什么?当需要内存但不可用时崩溃?无论如何内核都会处理这个问题。)

    【讨论】:

      猜你喜欢
      • 2013-11-29
      • 2015-07-07
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      相关资源
      最近更新 更多