dsh-session-vacuum

前言

DSH 会话日志随着对话轮次的增加会不断膨胀,最终导致加载缓慢甚至 OOM。根本原因是流式片段(如 assistant/chunk、text-chunks 等)被写入但从未被读取。这些只写不读的数据会不断堆积,导致单个会话文件迅速增长到 GB 级别,并在加载时消耗大量内存。

dsh-session-vacuum 插件在 DSH 启动时运行,直接在磁盘上删除这些死片段,确保下次加载会话时文件体积更小。

是什么

这是一个 DSH 插件,用于在启动时清理 DSH 会话日志中的死流式片段。它由 mili1360 维护,属于 memory-optimization 类别。其核心目的是防止长会话加载时文件膨胀至 GB 级别,从而解决因日志过大导致的加载变慢和内存溢出问题。

核心能力

  1. 删除磁盘上的片段行:直接清理日志文件中无用的流式片段数据,而非仅隐藏。
  2. 原子替换与备份:使用 .orig 作为唯一备份文件,通过原子性重命名操作替换原日志文件,确保写入过程的安全性。
  3. 写入前自检:在写入清理后的日志前,会先验证数据结构是否满足 DSH 的加载契约(如连续的 seq、无悬空引用等),验证失败则保留原文件。
  4. 默认 Live 模式:全新安装后默认开启,会自动修剪空闲日志,无需配置即可生效。
  5. 时间窗口保护:默认尊重 liveWindowMs 配置(默认为 2 分钟),不触碰正在写入的会话日志,避免干扰实时交互。

安装与配置

插件通过 dsh 块集成。安装前请确保 Node.js 版本不低于 22.15.0。

在 dsh.config.yml 或对应的插件配置中启用该插件:

dsh:
  bundle:
    patch: ./cordis.patch.yml

配置项说明:
- enabled: false:关闭插件。
- dryRun: true:预演模式,记录将要执行的操作但不实际写入文件,用于观察清理效果。

典型用法

  1. 观察清理效果:先设置 dryRun: true,查看将要删除的行数和文件大小变化,确认无误后再关闭预演模式。
  2. 关闭插件:如果需要完全禁用,设置 enabled: false。
  3. 恢复 OOM:对于已经因大日志导致 OOM 的会话,使用此插件清理后重新加载,可显著降低内存占用。

注意事项

  1. 设计上具有破坏性:插件会永久删除磁盘上的片段行,.orig 是唯一的备份文件且不会被自动删除。
  2. 不触碰活跃会话:插件不会修改最近 2 分钟内有写入的会话日志。
  3. 不缩小已加载会话:该插件只处理磁盘上的文件。如果会话已经被 DSH 进程加载到内存中,它不会减小当前进程的内存占用;它只能减小“下一次”加载时的开销。

结语

dsh-session-vacuum 是解决 DSH 长会话膨胀问题的有效工具。通过在启动时清理磁盘上的死数据,它能让会话文件从 GB 级别缩减至 MB 级别,恢复加载速度并避免 OOM。使用时请务必注意其破坏性设计,并充分利用 dryRun 模式进行验证。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜