Skip to content

v2.16.5

Choose a tag to compare

@MisiteQ MisiteQ released this 08 Oct 02:22
· 34 commits to main since this release

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() 可达数百万行。

修复

  1. 导出路径不再缓存:export_rows / export_net / query_prefix 改用 _no_cache(rows)(直接返回,不挂 _read_memo),函数返回后 Python GC 回收
  2. _memo 仅保留给面板轮询触发的 query()(休眠保护核心场景)
  3. 全表查询加 LIMIT 1000000 保护:防止极端积累撑爆内存(约 23 个月 × 每分钟 1 条,远超正常 retention 30 天 = 4.3 万行)
  4. 休眠保护仍生效:休眠时返回空列表(导出要求准确数据,不能用过时缓存;读 db 会唤醒 STANDBY 硬盘)

SHA256

文件 校验值
fnmonitor-2.16.5-x86.fpk 2be361468df78de79977e5e162885bfcea149ecbe85b824292870be62dce84bb
fnmonitor-2.16.5-arm.fpk e66be22a191619d9b8116cbf4740dd05f011d84d211f725670371de2a3d01535