Node.js Raspberry Pi 3脚本RAM的使用

Node.js Raspberry Pi 3脚本RAM的使用,node.js,websocket,ram,raspberry-pi3,modbus,Node.js,Websocket,Ram,Raspberry Pi3,Modbus,我使用raspberry pi 3从设备中提取串行数据(USB),然后用WebSocket将这些数据发送到客户端。所有都在NodeJS上运行 为了从设备中提取数据,我们使用modbus rtu,但存在ram问题。脚本在1-2小时后停止工作。我们发现.readHoldingRegisters()会不断增加RAM的使用量 关于解决方案的任何提示?在ram约束环境中(节点可用容量小于1.5gb)对节点要做的第一件事是告诉节点本身,因为它自己似乎不知道 如果您不认为GC至少有1.4Gb可用,并且节点GC

我使用raspberry pi 3从设备中提取串行数据(USB),然后用WebSocket将这些数据发送到客户端。所有都在NodeJS上运行

为了从设备中提取数据,我们使用modbus rtu,但存在ram问题。脚本在1-2小时后停止工作。我们发现.readHoldingRegisters()会不断增加RAM的使用量


关于解决方案的任何提示?

在ram约束环境中(节点可用容量小于1.5gb)对节点要做的第一件事是告诉节点本身,因为它自己似乎不知道

如果您不认为GC至少有1.4Gb可用,并且节点GC是惰性的意思是,它将等待该限制释放大量内存。因此,在具有1Gb内存的Rasberry Pi 3上要做的第一件事是提前强制GC批,比如500Mb内存

node script.js --max-old-space-size=500 
这将迫使GC更快地采取行动(旧的空间大小不是节点的唯一内存空间,但它是最大的,因此GC应该围绕500/600 Mb的节点进程采取行动)

GC是一种同步操作(因此是惰性模式),它会影响性能,因此您可能需要微调限制

如果在此之后您仍然遇到问题,那么您确实存在内存泄漏(垃圾无法检索内存)。

谷歌搜索“节点内存泄漏”,它将为您提供一个很好的页面列表,说明如何调试内存泄漏。