问题描述
飞牛NAS相册的人脸识别功能在处理大量照片时,由于内存管理不善,导致人脸聚类任务无法完成。具体表现为:当识别照片数量达到一定规模后,AI管理服务因内存不足被OOM Killer强制终止,导致人脸聚类过程失败。
环境信息
- 设备型号:N150(内存16GB,无法扩展)
- 飞牛NAS版本:最新稳定版
- 照片数量:10万张+
- 问题重现:100%可重现
详细错误日志
问题分析
根本原因
- 内存消耗无限制:人脸聚类算法(疑似DBSCAN)内存复杂度为O(n²),随着人脸数量增加呈指数级增长
- 缺乏分批处理机制:系统尝试一次性处理所有人脸数据,超出物理内存容量
- 交换空间利用不足:未有效使用swap空间缓解内存压力
技术细节
- AI管理器服务(
ai_manager)在处理人脸聚类时内存占用失控
- 进程被OOM Killer终止后,相关状态文件损坏
- 服务自动重启但无法恢复中断的任务
- 用户无法手动重新开始识别(系统认为任务已完成)
重现步骤
- 在相册中上传数万张含有人脸的照片
- 等待系统开始人脸识别和聚类
- 观察系统日志,可见内存使用逐渐上升
- 当内存使用超过85%时,AI服务被OOM Killer终止
- 人脸聚类任务永久卡住,显示"无未识别的照片"
功能改进建议
高优先级
-
实现分批处理机制
- 设置人脸数量阈值(如每500个人脸进行一次聚类)
- 聚类完成后清理内存,继续下一批
-
增加内存使用监控
- 实时监控内存使用率,接近阈值时暂停或减速处理
- 提供可视化内存使用提示
-
改进错误恢复机制
- 任务被OOM Killer终止后能够自动恢复
- 提供手动重新开始识别的选项
中优先级
-
优化算法内存效率
- 考虑使用内存效率更高的聚类算法
- 实现流式处理,减少内存中同时保存的数据量
-
提供用户配置选项
- 允许用户设置最大内存使用限制
- 提供处理优先级选择(速度vs内存)
低优先级
-
增强日志和诊断信息
- 明确显示当前处理进度和内存使用情况
- 在Web界面提供详细的错误信息
用户体验影响
- 用户无法可靠使用人脸识别核心功能
- 数据量较大的用户基本无法正常使用该功能
- 每次失败都需要手动干预,体验较差
期望结果
希望在下一个系统版本中能够:
- ✅ 实现稳定的内存管理,防止OOM崩溃
- ✅ 添加分批处理机制,支持大规模照片库
- ✅ 提供任务状态监控和错误恢复功能
附加信息
此问题在社区中多次被提及,但尚未有根本解决方案。对于内存不可扩展的机型(如N100、N150系列)影响尤为严重。