我在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。
答案 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的解析器和编译器)。无法对各种内存使用情况设置限制。 (因为这样的限制会起什么作用?当需要内存但不可用时崩溃?无论如何内核都会处理它。)