服务器内存逐日上涨与数据库多余往返 #58

Open
opened 2026-10-14 00:42:11 +08:00 by Claude · 2 comments
Collaborator

现象

  • 网站服务进程每天多占约 22 MB 内存,只涨不降,直到重启(实测:空转一天等量 43,200 次,堆 +22 MB;修复写法 +0.2 MB)。生产机只有 4 GB,和计算服务、数据库共用。
  • 每读写一次数据库要来回 6 趟,真正干活的只有 1 趟;其中一趟每次都去查「表有哪些列」,从不记住。
  • 另有三张服务器内存小表(重算记录、交付去重、限流计数)只增不减。

根因

  • 报告后台任务每 2 秒等一次,每次都留下一个「取消时叫醒我」的登记,等完不撤。
  • 数据库适配层当初只求正确,表结构每次现查,会话设置分三趟发。

改什么

  • 后台任务等完即撤登记(P0,必须交)。
  • 数据库表结构、函数签名在进程内记 5 分钟,迁移出错时自动作废;会话设置三趟合一趟。6 趟降到 4 趟。两项都带开关,按 A/B 实测决定默认开不开。
  • 三张内存表加过期清理和上限,有效期内行为不变。
  • 开登录会话缓存(你 10-14 决定):普通请求 5 分钟内不再每次查库;改密码、注销账户、后台等敏感操作每次照查。代价:改密码或封号后,别的设备上的旧登录最多再用 5 分钟。

风险
数据库层改动由 Grok 在 Docker 里跑全套数据库测试比对;元数据缓存在迁移与重启之间最多 5 分钟可能用旧表结构(新增列不受影响)。

任务书 docs/tasks/TASK-node-runtime-resources-20261013.md
分支 codex/node-runtime-resources-20261013
前置 无

来源:2026-10-13 全仓屎山与性能排查(产品负责人同意立单)。

**现象** - 网站服务进程每天多占约 22 MB 内存,只涨不降,直到重启(实测:空转一天等量 43,200 次,堆 +22 MB;修复写法 +0.2 MB)。生产机只有 4 GB,和计算服务、数据库共用。 - 每读写一次数据库要来回 6 趟,真正干活的只有 1 趟;其中一趟每次都去查「表有哪些列」,从不记住。 - 另有三张服务器内存小表(重算记录、交付去重、限流计数)只增不减。 **根因** - 报告后台任务每 2 秒等一次,每次都留下一个「取消时叫醒我」的登记,等完不撤。 - 数据库适配层当初只求正确,表结构每次现查,会话设置分三趟发。 **改什么** - 后台任务等完即撤登记(P0,必须交)。 - 数据库表结构、函数签名在进程内记 5 分钟,迁移出错时自动作废;会话设置三趟合一趟。6 趟降到 4 趟。两项都带开关,按 A/B 实测决定默认开不开。 - 三张内存表加过期清理和上限,有效期内行为不变。 - **开登录会话缓存(你 10-14 决定)**:普通请求 5 分钟内不再每次查库;改密码、注销账户、后台等敏感操作每次照查。代价:改密码或封号后,别的设备上的旧登录最多再用 5 分钟。 **风险** 数据库层改动由 Grok 在 Docker 里跑全套数据库测试比对;元数据缓存在迁移与重启之间最多 5 分钟可能用旧表结构(新增列不受影响)。 **任务书** `docs/tasks/TASK-node-runtime-resources-20261013.md` **分支** `codex/node-runtime-resources-20261013` **前置** 无 _来源:2026-10-13 全仓屎山与性能排查(产品负责人同意立单)。_
Author
Collaborator

任务书已写好,交给 Grok 做。 现在可以领取。

  • 任务书:docs/tasks/TASK-node-runtime-resources-20261013.md(staging 2994588ad)
  • 分支:codex/node-runtime-resources-20261013
  • 根因、红线、验收标准都在任务书里;P1/P2 级改动按产品要求做 A/B。
<!-- agent:claude plan brief=docs/tasks/TASK-node-runtime-resources-20261013.md branch=codex/node-runtime-resources-20261013 base=2994588ad4d858dead4835943e5883c5aa2b03f8 --> **任务书已写好,交给 Grok 做。** 现在可以领取。 - 任务书:`docs/tasks/TASK-node-runtime-resources-20261013.md`(staging `2994588ad`) - 分支:`codex/node-runtime-resources-20261013` - 根因、红线、验收标准都在任务书里;P1/P2 级改动按产品要求做 A/B。
Claude added the agent/试点agent/待执行 labels 2026-10-14 00:42:14 +08:00
Grok added the agent/执行中 label 2026-10-14 02:20:01 +08:00
Collaborator

服务器长时间开着,不再因为空等报告把内存一点一点堆上去。访问本地数据库时少走几趟,这一项已经按测量结果默认打开。

登录是否少查一次库,开关先关着。测试里普通读取的查库次数从 3 次降到 1 次,但还没有拿真实身份库比过耗时,所以不能按门槛改成默认开。要开的话,在服务器环境里把 IDENTITY_SESSION_COOKIE_CACHE 设成 on。打开之后,一台设备改了密码,其它设备最多还能再浏览 5 分钟,这段时间改不了密码、也注销不了账户。改密码、注销和后台入口每次都会重新核对登录。

数据库两个开关默认开。整段操作的来回次数从 49 降到 32,耗时中位数从 75.84 毫秒降到 36.48 毫秒,两边返回的内容一致。任何一个写成 off 就回到原来的走法。网页容器本来就读环境文件,不用改编排文件。

检查 命令 结果
类型 tsc 通过
规范 lint 0 个错误(原有警告没动)
本单测试 点名的测试文件 134 通过,0 失败,0 取消
数据库 test:db,开关关一次、开一次 都是 81 项里 13 项失败,名称与 Windows 已知清单相同,没有多出来的
往返对照 虚构数据的对照脚本 49 → 32 次,耗时降 51.9%,内容一致

进度:docs/tasks/PROGRESS-node-runtime-resources-20261013.md。真机两台设备的步骤:docs/testing/node-runtime-resources-20261013.md。对照数字:docs/testing/node-runtime-resources-ab-20261013.md。

生产上的内存曲线要等部署之后再看。没有跑整套前端测试和打包。任务书里的基线提交和现在的测试线不一致,改动仍按任务书做完,没有另问。

<!-- agent:grok report branch=codex/node-runtime-resources-20261013 sha=4c3485bc2352e8f9de097d81d9979092ee2bb280 --> 服务器长时间开着,不再因为空等报告把内存一点一点堆上去。访问本地数据库时少走几趟,这一项已经按测量结果默认打开。 登录是否少查一次库,开关先关着。测试里普通读取的查库次数从 3 次降到 1 次,但还没有拿真实身份库比过耗时,所以不能按门槛改成默认开。要开的话,在服务器环境里把 `IDENTITY_SESSION_COOKIE_CACHE` 设成 `on`。打开之后,一台设备改了密码,其它设备最多还能再浏览 5 分钟,这段时间改不了密码、也注销不了账户。改密码、注销和后台入口每次都会重新核对登录。 数据库两个开关默认开。整段操作的来回次数从 49 降到 32,耗时中位数从 75.84 毫秒降到 36.48 毫秒,两边返回的内容一致。任何一个写成 `off` 就回到原来的走法。网页容器本来就读环境文件,不用改编排文件。 | 检查 | 命令 | 结果 | | --- | --- | --- | | 类型 | tsc | 通过 | | 规范 | lint | 0 个错误(原有警告没动) | | 本单测试 | 点名的测试文件 | 134 通过,0 失败,0 取消 | | 数据库 | test:db,开关关一次、开一次 | 都是 81 项里 13 项失败,名称与 Windows 已知清单相同,没有多出来的 | | 往返对照 | 虚构数据的对照脚本 | 49 → 32 次,耗时降 51.9%,内容一致 | 进度:`docs/tasks/PROGRESS-node-runtime-resources-20261013.md`。真机两台设备的步骤:`docs/testing/node-runtime-resources-20261013.md`。对照数字:`docs/testing/node-runtime-resources-ab-20261013.md`。 生产上的内存曲线要等部署之后再看。没有跑整套前端测试和打包。任务书里的基线提交和现在的测试线不一致,改动仍按任务书做完,没有另问。
Grok added agent/待验收 and removed agent/待执行agent/执行中 labels 2026-10-14 03:33:32 +08:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: root/Jyotisha#58