如何为 Raspberry pi 调整 node.js 内存使用?

How do I tune node.js memory usage for Raspberry pi?

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

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 中挤出更多空闲 ram 的技巧将不胜感激。

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

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

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

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