网通社科技快报

MultiNet7每轮clean后ESP32P4堆内存持续下降6轮活块增160个

在ESP32-P4平台部署MultiNet7语音识别模型过程中,开发者发现即使严格在每次识别超时后调用clean()清理资源,系统内部堆空闲内存仍以约5.5字节/秒速度持续下降。通过启用HEAP_TRACE_LEAKS进行堆追踪,6轮测试中ctc_path_alloc活块数从18增至178,关联token数组活块同步从18增至167,且该增长在安静与背景音乐场景下高度一致(每轮新增约24–25个活块),排除噪声干扰因素。值得注意的是,第4至5轮空闲内存曾短暂回升(22703→25507 B),但活块数量未回落,说明free波动不反映目标对象回收状态。问题并非单纯内存泄漏:活块累积与timeouts参数设置无关(不同阈值下clean调用间隔稳定在32004 ms左右),表明根源在于单次推理流程中对象生成逻辑——如CTC解码路径重复创建中间结构而clean未能覆盖全部引用链,或全局指针持有缓存对象导致无法释放。诊断需结合free总量、最大连续空闲块及历史最低水位三类指标,并确保对比处于相同业务阶段;堆追踪本身存在窗口关闭延迟释放、缓冲溢出漏记等局限,需配合mn7_destroy()显式销毁验证残留情况。该现象对常开式端侧语音应用构成实质风险:按每轮+25字节估算,数万轮后即可耗尽ESP32-P4约384 KB默认堆空间。目前社区暂无官方修复,部分开发者尝试通过heap_caps_check_integrity校验堆完整性、定期输出meminfo趋势图、解耦音频队列与引擎、添加自定义trace hook等方式辅助定位。此案例凸显嵌入式AI长时运行中对象生命周期精确控制的必要性。