Repository navigation
v2.16.5
v2.16.5 修复长期运行后内存冲顶不回落(issue #3)
长期运行(历史库积累数百万行)后,fnmonitor 单进程 RSS 可达数 GB 且不回落。用户实测:692 万行 metrics 表,一次 GET /api/export?range=all 即 +1.44 GiB RSS,32 秒内采样为零不回落。
根因
历史导出(/api/export?range=all)、流量统计、健康报告路径的查询结果被误挂入「休眠读缓存」_read_memo 永久持有。_memo 缓存本为「休眠硬盘不被面板轮询唤醒」设计,但被误用到导出路径——导出是用户主动的一次性操作,下次可能要不同范围或最新数据,缓存它毫无意义,且全表 fetchall() 可达数百万行。
修复
- 导出路径不再缓存:
export_rows/export_net/query_prefix改用_no_cache(rows)(直接返回,不挂_read_memo),函数返回后 Python GC 回收 _memo仅保留给面板轮询触发的query()(休眠保护核心场景)- 全表查询加
LIMIT 1000000保护:防止极端积累撑爆内存(约 23 个月 × 每分钟 1 条,远超正常 retention 30 天 = 4.3 万行) - 休眠保护仍生效:休眠时返回空列表(导出要求准确数据,不能用过时缓存;读 db 会唤醒 STANDBY 硬盘)
SHA256
| 文件 | 校验值 |
|---|---|
| fnmonitor-2.16.5-x86.fpk | 2be361468df78de79977e5e162885bfcea149ecbe85b824292870be62dce84bb |
| fnmonitor-2.16.5-arm.fpk | e66be22a191619d9b8116cbf4740dd05f011d84d211f725670371de2a3d01535 |