VS Code クラッシュを修正: The window has crashed (reason: 'oom', code: '139')

intermediate💻 VS Code2026-05-06| Visual Studio Code(全バージョン)、Linux / macOS / Windows、Node.jsベースのレンダラープロセス

Error Message

The window has crashed (reason: 'oom', code: '139')
#パフォーマンス#メモリ#クラッシュ

何が起きているか

VS Code にダイアログが表示されます: The window has crashed (reason: 'oom', code: '139')。エディターがフリーズし、ウィンドウが真っ白になり、ワークスペース全体が落ちることもあります。これはOOM(メモリ不足)による強制終了です — ヒープ領域が不足したため、OSまたはElectronランタイムがレンダラープロセスを終了させたのです。

大規模なモノレポ、同時に実行される拡張機能が多すぎる場合、または巨大な型グラフを持つTypeScriptプロジェクトが主な原因です。解決策は2つに集約されます: VS Codeにより多くのメモリを割り当てること、そして実際に消費しているものを削減することです。

手順1 — 本当にOOMか確認する

すぐに修正に飛びつかないでください。まず、壊れた拡張機能や不正なワークスペース状態が真の原因でないことを確認します。

VS CodeのプロセスエクスプローラーをOpenします: Help → Open Process Explorer。クラッシュを再現しながら Memory 列を監視してください。レンダラープロセスが1〜2GBを超えて突然消えた場合、OOMの問題です。

Linuxでは、カーネルのOOMキラーログで確認します:

dmesg | grep -i 'killed process'
# または
journalctl -k | grep oom

code または code-oss バイナリに関連する Out of memory: Killed process の行を探してください。これでVS Codeのバグではなく、OSが強制終了したことが確認できます。

手順2 — レンダラーのヒープ上限を引き上げる

ElectronのV8レンダラーはプラットフォームによって約700MB〜1.5GBのヒープで起動します。大規模プロジェクトではこの上限に簡単に達してしまいます。上限を引き上げましょう。

VS Codeの起動フラグファイルを開きます:

Ctrl+Shift+P  →  "Preferences: Configure Runtime Arguments"

ヒープを4GBに引き上げるために以下のエントリを追加します:

{
  "js-flags": "--max-old-space-size=4096"
}

保存後、VS Codeを完全に再起動してください — すべてのウィンドウを閉じてください。単に再読み込みするだけでは不十分です。目安: 8GBのマシンでは 4096、16GBでは 8192 を使用します。

ターミナルから起動する場合は、代わりにフラグを直接渡します:

code --js-flags="--max-old-space-size=4096" .

手順3 — メモリリークしている拡張機能を特定する

拡張機能は単一のホストプロセスを共有しています。出来の悪い拡張機能1つが、他はすべて問題なさそうに見える中で、静かに数ギガバイトを消費することがあります。拡張機能の二分探索を使ってすばやく特定しましょう:

Ctrl+Shift+P  →  "Start Extension Bisect"

VS Codeは拡張機能の半分を無効にし、クラッシュを再現するよう求め、手動で切り替えることなく自動的に範囲を絞り込んでいきます。

直接的なアプローチを好む場合は、すべてをオフにして起動します:

code --disable-extensions .

クラッシュが消えた場合、拡張機能が原因です。よくある容疑者: 大規模Pythonプロジェクトでのpylance、広大なJSコードベースでのESLint、数万コミットのリポジトリでのGitLens、そして全般的に言語サーバーが挙げられます。

手順4 — 大規模プロジェクトのTypeScriptメモリをチューニングする

TypeScript言語サーバーはVS Codeの上位メモリ消費者の常連です。デフォルトの上限は3GBで、小規模プロジェクトには十分ですが、500以上のソースファイルを持つ大規模モノレポには足りません。

ワークスペースの .vscode/settings.json に追記します:

{
  "typescript.tsserver.maxTsServerMemory": 8192,
  "typescript.tsserver.experimental.enableProjectDiagnostics": false
}

ついでに tsconfig.json の除外設定も確認してください。これがないと、tsserverはプロジェクトルート以下のすべてを型チェックします — node_modules 内の数百万行のコードも含めて:

{
  "exclude": [
    "node_modules",
    "dist",
    "build",
    "**/*.spec.ts"
  ]
}

この exclude ブロックが1つ欠けているだけで、tsserverのメモリ使用量が2倍や3倍になることがあります。

手順5 — ワークスペースの範囲を絞る

ワークスペース内のすべてのフォルダに対して、ファイルウォッチャー、検索インデックス、言語機能が有効になります。ホームディレクトリ全体や巨大なモノレポのルートを開くと、1文字入力する前からVS Codeは膨大なバックグラウンド処理を行っています。

  • .code-workspace ファイルを使用して、実際に編集するサブディレクトリのみを含めましょう。
  • ファイル監視と検索から、大きな生成フォルダを除外しましょう:
{
  "files.watcherExclude": {
    "**/node_modules/**": true,
    "**/dist/**": true,
    "**/.git/objects/**": true
  },
  "files.exclude": {
    "**/node_modules": true
  },
  "search.exclude": {
    "**/node_modules": true,
    "**/dist": true
  }
}

手順6 — 使わない機能を無効にする

VS Codeの一部の組み込み機能は、意外なほどコストが高いです。不要なものはオフにしましょう:

{
  "editor.minimap.enabled": false,
  "editor.codeLens": false,
  "git.decorations.enabled": false,
  "extensions.autoUpdate": false,
  "telemetry.telemetryLevel": "off"
}

Code Lensは意外と見落とされがちな問題の原因です。インラインの参照カウントやテスト実行ボタンを表示するために、VS Codeは常にライブのシンボルテーブルをメモリ上に保持する必要があります。これを無効にするだけで、大規模なTypeScriptプロジェクトでは100〜300MBを解放できることがあります。

修正を確認する

まずクリーンな再起動を行います — ウィンドウを再読み込みするだけでは不十分です:

  • VS Codeを完全に閉じます(Linuxでは必要に応じて pkill code)。
  • プロジェクトを再度開きます。
  • すべての言語サーバーのインデックス作成が完了するまで2〜3分待ちます。
  • Help → Open Process Explorer を開きます — レンダラープロセスは上昇し続けるのではなく、新しいヒープ上限以下で安定するはずです。

Linuxではターミナルでメモリをリアルタイムに監視できます:

watch -n 2 'ps aux | grep code | grep -v grep | awk "{print \$6/1024 \" MB \", \$11}"'

通常使用で1時間後もメモリが安定し、OOMクラッシュが再発しなければ、修正完了です。

クイックリファレンス

  • --disable-extensions でクラッシュが止まる → 拡張機能の二分探索を実行して問題のある拡張機能を特定する。
  • 大規模TypeScriptプロジェクトでのみクラッシュするtypescript.tsserver.maxTsServerMemory を引き上げ、適切な tsconfig.json の除外設定を追加する。
  • どのプロジェクトでもクラッシュするargv.json--max-old-space-size を引き上げる。
  • Linuxでのみクラッシュするdmesg を確認する。VS Code自身のヒープ上限が効く前にカーネルがVS Codeを終了させている可能性があります。RAMが少ない(8GB未満)場合は、スワップファイルを追加すると改善することがあります。

Related Error Notes