fix(mem): 内存口径定案 —— BASE 448 / MIN 448 / MAX 1024(用户裁定)

用户裁定:「base 448 没问题 max 就是 1024」。据此把两侧常量收成一份事实
(编排器 instanceMemMb() 与插件客户端 MEM_* 必须逐值一致,verify-mem-model 会守着):

· BASE 160 → 448:0.1.5 基座**实测 312 MiB**,旧值按 0.1.2 的 106~145 估的、严重低估
  ⇒ 384 的上限里只剩 72 MiB 给插件,这正是宿主 swap 被吃掉(452 MiB)的原因
· MIN 384 → 448:**MIN 必须 ≥ BASE**,否则 clamp(raw, MIN, MAX) 的下限失去意义
  (旧 384 在 BASE=160 时满足该不变量,抬 BASE 后必须跟着抬)
· MAX 1536 → 1024:不是偏好,而是编排器头部既有的不变量
  「上限 1024M 是单实例硬顶(宿主 1870M)」;在途草稿的 1536 与宿主容量前提自相矛盾
· mcn 成本表保持 128(驳回草稿的 256):无可支撑抬高的实测,反向有证据 ——
  装了它的用户在旧 384 上限下一直跑得住 ⇒ 需求 ≤384;而抬高会直接吃宿主余量

实测(铺发+重启后经 /api/dsh/status 核对):admin 384→576、guest 384→448,
均在 [448,1024] 内;heapMb 256;两实例 restarts:0。宿主可用 761→1267 MiB。
本机 verify-mem-model 与 npm run verify 均**首次全绿**。

插件 business-plugins 0.3.16 → 0.3.17(客户端常量随之更新)。
This commit is contained in:
admin committed 2026-09-14 21:38:57 +08:00
1 parent 29c57a8207
commit 683c4cdeff
3 files changed
+19 -8

No files matched your search

+12 -2
View File
@@ -78,10 +78,20 @@ const WATCHDOG_TASK = 'Read DSHS_HANDOFF_PATH. If it contains a JSON {"command":
* ──────────────────────────────────────────────────────────────────────────── */
const PLUGIN_MEM_MB: Record<string, number> = {
'dsh-univer-office': 512, // 实测其 gateway 单进程 ≈390 MB(2026-09-13 14:44 384→512:544 仍欠 ~50-120 MiB,实测 gateway 起不来;512 ⇒ 配额 672)
// ⚠️ mcn 套件**保持 128**(2026-09-14 定案):没有实测依据支撑抬高 —— 反而有反向证据:
// 装了它的那个用户在**旧 384 上限**下一直跑得住 ⇒ 需求 ≤384。上限抬升会直接吃宿主机余量
// (宿主 1870M / 可用 ≈761M / swap 已用 452M),等有实测再抬。
'dsh-plugin-mcn-suite': 128, // 7 插件整合包(含 xlsx 等重型依赖)
}
const BASE_MEM_MB = 160 // dsh 基座(实测稳态 106~117、峰值约 145)
const MIN_MEM_MB = 384 // 不低于原写死值(等于零回归)
// BASE 448(2026-09-14 用户裁定):0.1.5 基座**实测 312 MiB**,旧值 160(按 0.1.2 的 106~145)严重低估
// —— 384 的上限里只剩 72 MiB 给插件,正是宿主 swap 被吃掉的原因;抬高 BASE 是**修正低估**。
const BASE_MEM_MB = 448
// MIN 必须 ≥ BASE,否则 `clamp(mb, MIN, MAX)` 里的 MIN 失去意义(永远不会低于 BASE)。
// 故取 MIN = BASE = 448(旧值 384 在 BASE=160 时满足该不变量,抬 BASE 后必须跟着抬)。
const MIN_MEM_MB = 448
// MAX 保持 1024 —— 这不是偏好,而是**本文档头部已写明的不变量**:
// 「上限 1024M 是单实例硬顶(宿主 1870M)」。2026-09-14 用户裁定「max 就是 1024」;
// 在途草稿里的 1536 与宿主机容量前提**自相矛盾**,已驳回。
const MAX_MEM_MB = 1024
const HEAP_HEADROOM_MB = 96 // 配额里留给非堆部分(native/栈/共享)