现象
在使用 IoTDB 1.3.3.5 及以下版本时,开启 Pipe 数据同步功能后,发送端 DataNode 频繁遭遇 Out of Memory(OOM)异常,而接收端节点(DataNode)却能正常运行。
通过 Grafana 监控发现,发送端 DataNode 的 Heap Memory 中老年代存在部分内存无法随垃圾回收(GC)过程释放,随着运行时间的推移,最终导致 OOM 并使 DataNode 节点崩溃。
进一步分析 dump 的内存文件,观察到 PipeInsertNodeTabletInsertionEvent 实例数量异常庞大,由此推测 OOM 问题与 Pipe 功能紧密相关。
原因
经深入剖析,问题根源在于待同步的 InsertNode 请求实例在内存中大量堆积,却未能成功触发数据同步机制降级为 TsFile 同步,以释放占用的内存资源。由于内存无法得到有效释放,堆内内存持续被耗尽,最终引发 OOM 异常。
解决方案
为彻底解决该问题,建议将 IoTDB 升级至 1.3.3.6 及以上版本。新版本针对 Pipe 数据同步内存管理进行了定向优化,有效避免了因 InsertNode 请求实例堆积导致的 OOM 问题,确保系统运行的稳定性和可靠性。