前言¶
在 Windows 上跑 DSH Desktop 时,真正拖垮体验的不一定是物理内存条占满,而是提交内存(commit charge)逼近上限:系统还能分配页面,但虚拟内存池已经紧张,DSH 与 Electron 子进程会突然变慢、闪退,或留下中断一半的会话。任务管理器里的「已提交」百分比能看趋势,却很难回答「是不是 DSH 自己在吃 commit、该不该重启整个壳」这类问题。
下面介绍社区插件 dsh-memory-watchdog(界面名 DSH Memory Guard,维护者 elegant01,分类 admin-security)。它在 DSH 插件生命周期内持续采样 Windows 提交内存,做归因、阈值预警、只读分页文件建议与 7 天崩溃时间线;可选的自动重启与崩溃后续接默认关闭,需要你在设置里明确打开并承担文档写明的代价。
这是什么¶
dsh-memory-watchdog 是面向 Windows x64 的 DSH Desktop 插件,依赖 DSH 版本 >=0.2.0-rc.1 <0.3(package 当前版本 0.3.1,MIT 许可证)。它不安装服务、计划任务或原生组件,也不依赖 WMI/CIM;采集由随插件运行的轻量 PowerShell 进程完成,只读性能计数与进程信息,不上传遥测。
插件解决的核心问题是:在 DSH 进程权限内,把 commit 压力可视化、可配置,并在用户 opt-in 的前提下,用 fail-closed 的重启门限与活动检测决定是否重启整个 DSH Desktop,而不是在后台静默杀进程或改系统分页文件。
监控与状态机¶
插件加载后立即开始监控和预警,但不会自动重启任何进程,直到你在 DSH 的「设置 → 插件 → DSH Memory Guard」中打开自动重启开关。
采样与判定要点如下:
- 每 5 秒读取提交内存已用量、提交上限、物理内存总量与可用量。
- 默认连续 3 个样本确认状态,避免尖峰误判;阈值附近使用迟滞(例如 warning 进入 ≥80% 或可用 commit ≤6 GiB,退出需 <75% 回 normal;critical 在 ≥90% 且可用 ≤2 GiB,或 ≥95% 等条件下进入)。
- 达到 95% 提交占用时无论可用量多少都算 critical(绝对兜底)。
- 采集样本暂时送不到时会进入 unknown;若只是抖动,toast 延迟 2 分钟才弹,2 分钟内恢复则只记事件与「采样延迟」计数,不打扰界面。
界面侧:warning / critical / 恢复等通过页面内 toast 提示;右下角有常驻状态胶囊,点击可展开摘要(压力百分比、状态、自动重启能力、DSH 占比、Top 进程、重启门限结论等),与设置页卡片同源,可一键刷新。
提交内存归因与重启门限¶
每 30 秒做一次提交内存归因:使用进程快照与 GetProcessMemoryInfo(PrivateUsage),分母为系统 commit 已用量;面板展示 DSH 进程树进程数、合计 commit、占系统提交比例,以及 Top 5 进程(名称、PID、commit)。一轮在本机约 1.9 秒(含 PowerShell 启动),只读、不读其他进程内存内容。
重启门限(restart gate) 默认要求 DSH 进程树占系统提交内存 20% 以上才允许自动重启;占比不足、归因缺失或数据超过 60 秒过期时一律不重启(fail closed),并在面板与 toast 说明原因。将 restartGatePct 设为 0 可关闭该判定——适用于你确认压力主要来自 DSH 且仍接受重启代价的场景。
阈值与 volatile 设置¶
下列字段在设置页调整后立即生效,无需重启 DSH;超出范围会被夹到边界,criticalPct 始终高于 warningPct:
| 设置项 | 默认 | 范围 | 说明 |
|---|---|---|---|
warningPct |
80 | 50–95 | 进入 warning 的提交内存百分比 |
criticalPct |
90 | 55–99 | 进入 critical,须高于 warningPct |
criticalAvailMb |
2048 | 256–32768 | 可用 commit 低于该值时也判 critical |
confirmSamples |
3 | 1–10 | 状态切换所需连续样本数 |
cooldownMinutes |
30 | 5–1440 | 两次重启最小间隔 |
restartGatePct |
20 | 0–100 | 重启门限;0 表示关闭 |
关闭自动重启开关会立即取消尚未开始的待执行重启;内存监控与预警继续运行。设置页在开启自动重启后会常驻显示完整代价说明,无需额外确认弹窗。
分页文件建议与崩溃时间线¶
每 5 分钟读取分页文件与提交上限配置(注册表与 GetPerformanceInfo),给出只读建议:例如无分页文件、提交上限相对物理内存余量过小、大内存机器分页文件全在系统盘、系统自动管理等。插件不会修改 Windows 虚拟内存设置,调整需你手动完成并重启生效。
每 10 分钟汇总最近 7 天崩溃与内存相关事件:DSH 的 crash-*.log(--- error --- 段首行)与系统日志中的虚拟内存耗尽、低虚拟内存、意外关机等;同一次事故多份日志会合并为一条。面板最多展示 20 条,保留最近 50 条事件历史,可导出 JSON 或使用「复制诊断信息」(导出不含完整日志正文与会话 id)。数据只读本机文件,不发网络请求。
自动重启(opt-in)如何触发¶
自动重启仅在以下条件同时满足时才会开始(摘录 README 决策链):
- 用户已在设置中开启开关;
- 压力为连续确认的 critical,且样本仍新鲜;
- 不在冷却期(默认 30 分钟),且当前 critical episode 尚未尝试过重启;
- 重启门限通过(或
restartGatePct为 0); - 活动检测确认空闲(运行中的 agent、待处理队列、running/stopping 的 job 等都会阻塞;API 异常按「未确认空闲」处理);
- 平台与 DSH 版本受支持,helper 能力自检通过;
- 用户未取消本次待执行动作。
重启对象是整个 DSH Desktop(Electron 主进程及子进程),不是只重载插件或刷新界面;可能丢失未发送草稿,并绕过 Electron 原生退出确认。若 commit 压力来自其他软件,重启可能无效——这正是重启门限存在的原因。交接由 helper 与 Host 两阶段完成;未收到 Host 的 go、用户取消或校验失败时,helper 自行退出,不结束任何进程。
开启前请通读 README「开启前请确认」:冷却期内最多重启一次、每个 critical episode 最多尝试一次、旧实例未退出或端口未释放时不会拉起新实例以避免双开等。
崩溃后自动续接(opt-in)¶
resumeAfterCrash 默认关闭。开启后,DSH 重启会扫描会话,对 turn/end 且 reason.kind === 'interrupted' 的中断注入续接提示;手动 aborted 永不续接。仅处理 12 小时内有用户输入、当前未运行、非空会话,并遵守静置时间与每小时尝试次数限制。续接 turn 使用该会话原有工具与权限——这是开启前最需要权衡的一点。账本保存在 $DSH_HOME/memory-watchdog/resume.json(默认 ~/.dsh/memory-watchdog/)。
安装与启用¶
官方说明(README「安装与卸载」):
- 从 DSH Market 安装本插件;或
- 使用 DSH 的插件安装能力安装构建好的 npm tarball。
安装后无需另行安装服务或运行构建脚本。卸载会清理定时器、取消待执行动作并停止采集子进程;$DSH_HOME/memory-watchdog/ 下历史记录不会自动删除,确认不需要后可手动删除。不要在重启交接已开始时卸载插件,helper 可能仍会完成本次重启。
典型使用路径:
- 安装插件后打开 DSH,观察设置页与右下角胶囊中的 commit 状态与 DSH 占比。
- 按需调整
warningPct/criticalPct等阈值,先依赖页面内预警与归因,确认压力模式。 - 仅在阅读代价说明并接受风险后,再打开自动重启或崩溃续接;非 DSH 主导的 commit 压力时,优先考虑分页文件建议与系统侧排查,而非依赖重启。
开发侧自检命令(维护者仓库):
npm test # node:test 单元与集成测试
npm run preflight # 包内容与安全规则检查
npm pack # 生成 tarball
适用场景与注意¶
适合谁:长期在 Windows 上跑 DSH Desktop、会话与 agent 任务较重、曾遇到 commit/OOM 或意外中断,且希望在 DSH 内看到归因与时间线而不是只靠任务管理器的用户。
务必知晓的边界:
- 插件以当前 DSH 进程权限运行;安装前应查看 GitHub 源码 与 MIT 许可证,社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系。
- Host 完全卡死或 OOM 时,插件无法继续工作;renderer 先挂时页面 toast 不可用,需依赖
$DSH_HOME/memory-watchdog/下事件与下次加载时的展示。 - 插件不承诺防止 OOM 或诊断具体泄漏;归因对无权限打开的进程是下界估计。
- 常驻采集 PowerShell 工作集约 62–70 MB、commit 约 49 MB;归因等任务为短命进程,README 给出了实测耗时量级。
结尾¶
DSH Memory Guard(dsh-memory-watchdog) 把 Windows 提交内存监控、DSH 侧归因、只读分页建议与崩溃时间线收进 DSH 插件边界内,并把自动重启与崩溃续接做成默认关闭、门限与活动检测 fail-closed 的可选项。若你在 Windows 上稳定跑 Harness,它提供的是可核对、可导出诊断的 commit 看板,而不是系统级万能看门狗。
- 目录页:https://www.skillhub.cn/plugins/elegant01/dsh-memory-watchdog
- 源码与完整说明:https://github.com/elegant01/dsh-memory-watchdog