Claude Code CLIがCPU 100%を占有する場合 — 原因と解決策
発見
前日の作業中、Claude Codeが突然止まって強制終了したことがあった。そして翌朝、MacBookが普段より熱かった。アクティビティモニタ(Activity Monitor)を開いてみると、Claude Code v2.1.27プロセスが**CPU 100%**を占有していた。
パス: ~/.local/share/claude/versions/2.1.27
コマンド: claude --continue
CPU: 99.5%
メモリ: ~600MB
実行時間: 約8時間以前にClaude Codeがスキル(Skill)で実行した開発サーバープロセスが終了せず、ゾンビのように残ってCPUを食い潰していた。
pkill claudeを試したが終了せず、kill -9 <PID>で強制終了する必要があった。
結局、セッションファイルの整理 + claude install 2.1.22で安定版にダウングレードして解決した。その後、CPU占有の再発はなし。
原因
Claude Code CLI v2.1.27で報告されている既知のバグだ。GitHubに同様の症状のissueが多数登録されている。
1. セッションファイルの肥大化(最有力)
~/.claude/projects/配下に溜まる.jsonlセッションファイルが大きくなると、パース中に無限CPUループに陥る。
claude --continueは以前のセッションファイルをロードするため、この問題の影響を直接受ける。
- v2.1.25では正常動作、v2.1.27で再現確認
- セッションファイル削除時に即時解決
参考: #22041 — CLI hangs at 99% CPU on startup with large session .jsonl files
2. Hooks + 並列インスタンスの競合
v2.1.23以降、hooksが有効な状態で複数のClaude Codeインスタンスを実行すると、100% CPU hangが発生する。
参考: #22172 — v2.1.23+ causes 100% CPU hang with multiple parallel instances and hooks
3. Idle状態のbusy-wait
setImmediate()の呼び出しがyieldなしで繰り返しスケジューリングされ、何も作業していなくてもCPUを占有する。
参考: #17148 — Claude Code consumes 100%+ CPU when idle in terminal
解決策
手順1: ゾンビプロセスを探す
ps aux | grep claude | grep -v grep出力からclaude関連のプロセスとPIDを確認する。
手順2: プロセスの終了
pkill claudeはこのゾンビプロセスには効かない。PIDを直接指定して終了させる必要がある。
# pkillは効かない
pkill claude # ← 反応なし
# PIDを直接指定して強制終了
kill -9 <PID>手順3: 肥大化したセッションファイルの整理
# セッションファイルのサイズ確認
du -sh ~/.claude/projects/*/
# 問題のセッションファイルを削除
rm ~/.claude/projects/<project-path>/*.jsonlセッションファイルを削除すると、claude --continueで以前の会話を続けることはできない。必要であればバックアップ後に削除すること。
手順4: バージョンのダウングレード(hooksユーザー)
hooksを使用中の場合は、以前の安定版にダウングレード。
claude installコマンドで特定のバージョンを指定してインストールできる。
# 特定のバージョンにダウングレード(vプレフィックスなし)
claude install 2.1.22
# 確認
claude --version注意:
claude install stableまたはclaude updateを実行すると、再び最新の安定版に戻ってしまう。
予防策
v2.1.23以上を使用する場合:
| 方法 | 説明 |
|---|---|
| セッションファイルの定期的な整理 | ~/.claude/projects/配下の.jsonlファイルが10MBを超えたら整理 |
| 終了確認の習慣 | claude終了後、ps aux | grep claudeでプロセスが実際に死んだか確認 |
--continueの乱用禁止 |
セッションが長くなるほど.jsonlが肥大化する。新しいセッションで始めるのが安全 |
| hooks + 並列実行の注意 | hooks有効状態で複数のインスタンス同時実行禁止 |
| アップデートの追跡 | anthropics/claude-code Issuesで関連fixを確認 |
/clearは会話コンテキストを初期化するだけで、.jsonlファイル自体を削除するわけではない。セッションファイルの肥大化防止には直接的な効果はない。
関連issue集
- #22041 — CLI hangs at 99% CPU on startup with large session .jsonl files
- #22172 — v2.1.23+ causes 100% CPU hang with parallel instances and hooks
- #17148 — Claude Code consumes 100%+ CPU when idle in terminal
- #11122 — Multiple Claude CLI processes accumulate causing high CPU usage
- #11377 — Memory leak: 23GB RAM and 143% CPU after 14 hours
AIに直接やらせる
以下の状況に合ったプロンプトをコピーしてAI(Claude, ChatGPTなど)に貼り付ければ、勝手に診断して整理してくれる。
Claude Codeが止まってターミナルだけ終了させた時
Claude Codeを使っていたら止まったので、ターミナルを強制終了した。
バックグラウンドにゾンビプロセスが残っている可能性があるので、確認して整理して。
1. `ps aux | grep claude | grep -v grep`で残っているプロセスを確認
2. 発見されたら`kill -9 <PID>`で強制終了(pkillは効かない)
3. `du -sh ~/.claude/projects/*/`で肥大化したセッションファイル確認 → 10MB超える.jsonl削除
各段階ごとに実行結果を表示し、何をしたか説明して。MacBookが普段より熱くなった時
MacBookが普段より熱い。Claude CodeのゾンビプロセスがCPUを占有している可能性がある。
診断して解決して。
1. `ps aux | grep claude | grep -v grep`でゾンビプロセス確認
2. 発見されたら`kill -9 <PID>`で強制終了(pkillは効かない)
3. `du -sh ~/.claude/projects/*/`で肥大化したセッションファイル確認 → 10MB超える.jsonl削除
4. hooksを使用中なら`claude install 2.1.22`で安定版へのダウングレードを検討
各段階ごとに実行結果を表示し、何をしたか説明して。私はclaude install 2.1.22にダウングレードした状態だ。同じ問題が修正されたバージョンが出たら、その時にアップデートする予定。