我使用树莓派3从设备拉串行数据(USB),然后我用websockets将此数据发送到客户端。
要从设备中提取数据,我们使用modbus-rtu,但我们有ram问题。脚本在1-2小时后停止工作。我们发现。readholdingregisters()会在一段时间后增加我们的RAM使用量。
有什么建议吗?
在ram约束环境(节点可用内存小于1.5gb)中处理节点的第一件事是告诉节点自己,因为,它似乎不能自己知道。
如果GC假设它至少有1.4Gb可用,并且节点GC是惰性意思,它将等待该限制以释放大量内存。因此,在ram为1Gb的Rasberry Pi 3上要做的第一件事就是更快地强制GC,比如500Mb的ram。
node script.js --max-old-space-size=500
它将迫使GC更快地行动(旧空间大小不是节点的唯一内存空间,但它是最大的,所以GC应该围绕500/600 Mb的节点进程行动)
GC是一个同步操作(因此是惰性模式),它可能会影响性能,因此您可能需要微调限制。
如果在此之后仍然遇到问题,则确实存在泄漏(Garbage无法检索的内存)。