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

时间:2017-03-11 02:54:02

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

我在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中挤出更多免费的ram。

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

1 个答案:

答案 0 :(得分:3)

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

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

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