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 模式進行驗證。

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

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

小夜