我使用树莓派 3 从设备中提取串行数据 (USB),然后使用 Websocket 将此数据发送到客户端。全部运行在 NodeJS 上。
为了从设备中提取数据,我们使用 modbus-rtu,但我们遇到了 ram 问题。该脚本会在 1-2 小时后停止工作。我们发现 .readHoldingRegisters() 会在一段时间后增加我们的 RAM 使用量。
有关解决方案的任何提示吗?
最佳答案
在内存限制环境( Node 可用空间小于 1.5GB)中, Node 要做的第一件事就是告诉 Node 本身,因为它自己似乎无法知道。
如果你不假设 GC 至少有 1.4Gb 可用,并且 Node GC 是惰性意思,它将等待该限制来释放大量内存。因此,在具有 1Gb 内存的 Rasberry Pi 3 上要做的第一件事就是尽快强制执行 GC,例如 500Mb 内存。
node script.js --max-old-space-size=500
这将迫使GC更快地采取行动(旧空间大小不是 Node 唯一的内存空间,但它是最大的,因此GC应该围绕500/600 Mb的 Node 进程采取行动)
GC 是同步操作(因此是惰性模式),它会影响性能,因此您可能需要微调限制。
如果在此之后您仍然遇到问题,则确实存在泄漏(垃圾无法检索的内存)。
关于node.js - Raspberry Pi 3 脚本 RAM 使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40214669/