我正在使用raspberry pi 3从设备中提取串行数据(USB),然后我将带有websockets的数据发送到客户端。所有都在NodeJS上运行。
要从设备中提取数据,我们使用modbus-rtu,但我们有一个ram问题。脚本在1-2小时后停止工作。我们发现.readHoldingRegisters()会在一段时间后增加我们的RAM使用率。
有关解决方案的任何提示吗?
答案 0 :(得分:2)
在ram约束环境中对节点做的第一件事(节点可用的小于1.5gb)就是告诉节点本身,因为它似乎无法自己知道。
如果您不认为GC至少有1.4Gb可用,并且节点GC lazy 意味着,它将等待该限制以释放大量内存。因此,使用1Gb ram在Rasberry Pi 3上做的第一件事就是尽快强制GC,比如500Mb ram。
node script.js --max-old-space-size=500
它会强制GC更快地执行(旧的空间大小不是节点的唯一内存空间,但它是最大的,因此GC应该围绕节点进程500/600 Mb)
GC是同步操作(因此是懒惰模式),它可能会影响性能,因此您可能需要微调限制。
如果您在此之后仍然遇到麻烦,那么您确实有泄漏(Garbage无法检索的内存)。