Skip to content

investigate: Agent SDK resume occasionally hangs at 100% CPU #331

@shabaraba

Description

@shabaraba

概要

Agent SDKのsession resume機能を使用する際、時々プロセスが100% CPUでハングする問題が発生している。根本原因は特定できていないが、暫定対策を実装済み。

症状

  • 2回目以降のメッセージ送信時(--session でresume)にハング
  • agent-wrapperプロセスが100% CPUで応答なし
  • for await (const message of stream) ループに入るが、最初のメッセージが来ない

調査結果

Agent SDK自体は正常動作

isolated testでは問題なし:

  • 基本的なresume ✅
  • canUseTool付きresume ✅
  • 全オプション付き3連続resume ✅
  • 存在しないsession IDでresume → エラーで終了(ハングしない)✅

vibing.nvim環境との差異

  1. プロセス起動方式: vim.system() vs 直接node実行
  2. stdout/stderr処理: Luaコールバック vs 直接コンソール
  3. プラグイン読み込み: 複数プラグインがロードされる
  4. 環境変数/cwd: 差異がある可能性

session jsonlファイル

  • 場所: ~/.claude/projects/<project-path>/<uuid>.jsonl
  • vibing.nvimは直接操作していない
  • Agent SDKが完全に管理
  • ファイル破損/不整合の可能性は排除できない

実装済み対策

1. 前のリクエストのキャンセル (buffer.lua)

function ChatBuffer:send_message()
  if self._current_handle_id then
    adapter:cancel(self._current_handle_id)
    self._current_handle_id = nil
  end
  -- ...
end

2. タイムアウト機構 (stream-processor.ts)

// 30秒でタイムアウト → session_corrupted として処理
const stream = withInitialTimeout(resultStream, INITIAL_MESSAGE_TIMEOUT_MS);

今後の調査ポイント

  • タイムアウト発生頻度のモニタリング
  • session jsonlファイルの整合性確認
  • vim.system()特有の問題がないか調査
  • Agent SDK側のissue/discussionを継続監視

関連

  • mote統合を実装したあたりから発生し始めた(直接的な因果関係は不明)
  • Agent SDK V2 APIはresumeは動くが、canUseToolが未サポートのため使用不可

ベンチマーク参考

項目
Node.js起動 ~21ms
Agent SDK読込 ~31ms
API初回応答 ~750ms
プロセスメモリ ~70MB

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions