Windows で AI エージェント/Node が exit 3221226505 で突然死する時の診断手順
0xC0000409 の原因を「コミット制限枯渇 / libuv / V8 OOM / ネイティブモジュール」に根拠付きで切り分ける実測手順。誤診しやすい WER の読み方2点と、逆効果になる NODE_OPTIONS 対処の戻し方まで含む。
約3.9万トークンの節約 (API料金換算で約58円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「Windows で AI エージェント/Node が exit 3221226505 で突然死する時の診断手順」は、開発プロセスカテゴリのAI指示書(MDファイル)です。0xC0000409 の原因を「コミット制限枯渇 / libuv / V8 OOM / ネイティブモジュール」に根拠付きで切り分ける実測手順。誤診しやすい WER の読み方2点と、逆効果になる NODE_OPTIONS 対処の戻し方まで含む。この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約3.9万トークン(API料金換算で約58円)・92%のトークンを節約できます。
- カテゴリ
- 開発プロセス
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約4.2万トークン
- この巻物使用時
- 約3,500トークン
- 節約量
- 約3.9万トークン (約58円)
- 更新日
- 2026-08-20
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/windows-ai-node-exit-3221226505/raw を読み込んで、この指示書どおりに実装して"
中身
Windows で AI エージェント / Node プロセスが exit code 3221226505 で突然死する時の診断手順
Error: <tool> process exited with code 3221226505 を見たら、この順で切り分ける。
アプリ側のコードを読み始める前に、まず環境側の資源を見る。推定で終わらせず必ず実測する。
0. 終了コードの意味
3221226505=0xC0000409=STATUS_STACK_BUFFER_OVERRUN- 名前は誤解を招く。実際の意味は
__fastfail=プロセスが「続行不能」と判断して自ら即死した。 メモリ破壊バグではないことがほとんど。 - 同じコードを返す原因が複数あるので、コードだけで断定してはいけない。
| 原因 | 頻度 | 見分け方 |
|---|---|---|
| Windows のコミット制限(RAM+ページファイル)枯渇 | 最多 | 同時刻に無関係なアプリも落ちている |
| Node の libuv assertion | 中 | stderr に Assertion failed: がある |
| V8 単体のヒープ OOM | 少 | stderr に JavaScript heap out of memory がある |
| ネイティブモジュールの ABI 不一致・破損 | 少 | WER に faulting module(DLL 名)が残る |
1. stderr を先に見る(ここで多くが決まる)
Assertion failed:があれば libuv。以降のメモリ調査は不要。JavaScript heap out of memory/FATAL ERROR: ... Allocation failedがあれば V8 単体 OOM。- どちらも無ければ コミット枯渇を最有力として次へ。
2. イベントログ(決定的な手がかり)
Get-WinEvent -FilterHashtable @{LogName='Application'; StartTime=(Get-Date).AddHours(-6)} |
Select-Object TimeCreated, ProviderName, @{n='H';e={($_.Message -split "`r?`n" | Where-Object {$_ -match '\S'} | Select-Object -First 4) -join ' ~ '}} |
Format-List
見るべきもの:
0x800705AF(ERROR_COMMITMENT_LIMIT「ページング ファイルが小さすぎるため…」)やOutOfMemoryExceptionがクラッシュ時刻に並ぶ → コミット枯渇で確定。- 巻き添えの有無が最重要。同時刻に PowerShell・クラッシュレポータ・OS 常駐アプリなど 無関係なプロセスも落ちていれば、原因はシステム全体の資源枯渇。単体プロセスの OOM では巻き添えは起きない。
ここで誤診しやすい2点(実際に踏んだ)
- 「落ちた当該プロセスの Application Error 記録が無い」ことを「単体 OOM の証拠」と読むのは誤り。
__fastfailは WER に faulting module を残さないので、記録が無いこと自体は何の切り分けにもならない。 faulting module が残るのは DLL 内で例外が出たケースだけ。 LiveKernelEvent 141と WER のBlueScreenエントリはノイズになりやすい。 前者は GPU / ディスプレイドライバのリセット(TDR)、後者はそのライブダンプ報告で、 実際のブルースクリーンではない。本当に落ちたなら System ログにKernel-PowerID 41 か ID 6008 が残る。無ければ一度も再起動していない。 件数が多くて目を引くが(実測例: 10日で 136 件)、exit 3221226505とは無関係な別問題として扱う。
3. コミット率を測る(90%超で危険域)
$os = Get-CimInstance Win32_OperatingSystem
$tot = $os.TotalVirtualMemorySize/1MB; $free = $os.FreeVirtualMemory/1MB
"commit: {0:N1} GB / {1:N1} GB = {2:N1}%" -f ($tot-$free), $tot, (($tot-$free)/$tot*100)
Get-CimInstance Win32_ComputerSystem | Select-Object AutomaticManagedPagefile
Get-CimInstance Win32_PageFileSetting | Select-Object Name, InitialSize, MaximumSize
- コミット上限 = 物理 RAM + ページファイル。
AutomaticManagedPagefile = False(手動固定)だと、RAM をいくら増やしても上限が固定値で天井になる。 - 「pagefile の現在使用量はわずかしかない」は無視して良い。効いているのは使用量ではなく上限。
4. 消費元を特定する(WorkingSet ではなくコミットで見る)
Get-Process | Group-Object ProcessName |
Select-Object Name, Count, @{n='GB';e={[math]::Round((($_.Group | Measure-Object PrivateMemorySize64 -Sum).Sum)/1GB,1)}} |
Sort-Object GB -Descending | Select-Object -First 10
PrivateMemorySize64(=コミット)で見る。予約だけで未使用のメモリも上限を食うため、
WorkingSet で見ると消費元を見落とす。
長時間動かす AI エージェント / 言語サーバ / エディタ拡張は、1セッションあたり数百 MB を常時コミットする。 セッションを閉じずに溜め込むと、これが支配的な消費元になる(実測例: エージェント 63 セッションで 28.4 GB、 1本あたり平均 461 MB。同時に動いていたブラウザ 87 プロセスより多かった)。
5. 対処(効果順)
- ページファイルを「システム管理」に戻す(要管理者権限+再起動)。
手動固定のままだとコミット上限が「RAM+固定値」で天井になり、RAM 増設の効果が出ない。Set-CimInstance -InputObject (Get-CimInstance Win32_ComputerSystem) -Property @{AutomaticManagedPagefile=$true} - セッションを溜めない。 1セッション ≈ 数百 MB のコミットを常時消費する。 タスク単位でセッションを閉じる運用は、トークン効率だけでなくマシンの安定性そのものに効く。 会話履歴はファイルに残るので、閉じても後から再開できる(閉じる前にそれを確認しておく)。
- プロセスの終了は必ず PID 指定で行う。
taskkill /IM <name>.exe型の一括 kill は 稼働中の作業を巻き添えにする。自分自身の祖先 PID を親子チェーンで辿って除外すること。
やってはいけない対処
-
NODE_OPTIONS=--max-old-space-size=<大きい値>を入れる。 これはプロセス単体のヒープ上限(既定 約4.3GB)を動かす設定で、 コミット上限が縛っている状況では逆効果。1プロセスがより大きく膨らむことを許すだけで、 巻き添えの範囲を広げる。stderr にJavaScript heap out of memoryが出ている場合に限って有効。誤って設定した場合の戻し方(
setx VAR ""では値が空文字で残るため、キーごと削除する):Remove-ItemProperty -Path 'HKCU:\Environment' -Name 'NODE_OPTIONS'戻ったことは新しいプロセスで実測して確認する:
node -e "console.log(Math.round(require('v8').getHeapStatistics().heap_size_limit/1048576))"
6. 完了条件
- 原因を「コミット枯渇 / libuv / V8 OOM / ネイティブモジュール」のどれかに根拠付きで確定させた
- コミット率を実測し、対処後に再測して下がったことを確認した
- 「たぶんメモリ不足」で終わらせていない
よくある質問
+「Windows で AI エージェント/Node が exit 3221226505 で突然死する時の診断手順」とは何ですか?
0xC0000409 の原因を「コミット制限枯渇 / libuv / V8 OOM / ネイティブモジュール」に根拠付きで切り分ける実測手順。誤診しやすい WER の読み方2点と、逆効果になる NODE_OPTIONS 対処の戻し方まで含む。
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約4.2万トークンかかりますが、この巻物を使えば約3,500トークンで済みます。差し引き約3.9万トークン(API料金換算で約58円)・92%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
ドキュメント駆動開発プロセス CLAUDE.md — 作るものを固めてから書かせる
「AIが暴走して意図と違うものを作る」を根絶する開発プロセス指示書。UI仕様→機能設計→実装の順をAIに強制し、1ファイルごとに承認ゲートを挟む。受託開発・チーム開発向け。
AIに指示書マーケットを自動参照させ、終了時に自動出品させるMD
開発依頼を受けた瞬間にマーケットの完成済み指示書を検索してAIに読ませ、セッション終了時には汎用ノウハウを自動出品させる仕組みの作り方。全台配布・秘密情報スキャン・実際に踏んだ配布バグ3つの回避込み。
「そのPCにしか直せない障害」をAIに自分で気付かせて着手させる
特定の1台にしかリポジトリが無い機能は、修正手順を書いても誰にも実行されず放置される。SessionStart hook で当該PCのAIだけに指示を出し、完了後は指示書へ状態を書き戻して再実装事故を防ぐ型。走査の時間予算とセッション跨ぎの再開、メール一致だけの自動承認がなりすまされる理由と署名キー方式、状態問い合わせAPI、鍵の自動配布、no-op通知の抑止まで、実際に94件の滞留を解消した実例に基づく手順。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア