メインコンテンツへスキップ
WSL 上で(Remote - WSL 経由で)Windsurf を使用していると、エディタが遅くなったり、応答しなくなったり、WSL バックエンドとの接続が繰り返し切断されたりすることがあります。これは主に、WSL ファイルシステム上で過剰なファイル監視やインデックス作成を行う拡張機能が原因で発生し、その結果として、Windows と WSL Linux 環境間のファイルシステムブリッジである Plan 9 (9P) プロトコル が飽和してしまうことによります。 この問題は、特に大規模なリポジトリを扱っている場合や、複数の言語サーバーが同時に動作している場合に発生しやすくなります。

症状

  • WSL に接続しているとき、Windsurf の動作が明らかに遅い、またはカクつく
  • エディタが頻繁に WSL バックエンドから切断され、再接続を試みる
  • 切断は、(Cascade を使用しているときなどの)アクティブな開発中 および エディタがアイドル状態のときの両方で発生する
  • Windsurf がクラッシュしたり応答しなくなり、IDE と WSL(wsl --shutdown)の両方を再起動する必要がある
  • 32 GB 以上の RAM を搭載したシステムでも、時間の経過とともに WSL のメモリ使用量が増加していく
  • WSL の診断ログに、大量の P9 Reply_Rlerror イベント(ファイルが見つからないエラー)が記録される
  • WSL の外で Windsurf を使用している場合(例: ローカルの Windows フォルダを開く)、パフォーマンスは正常である
  • 一般的な回避策(WSL の再起動、Windsurf の再インストール、.wslconfig のメモリ増量)だけでは問題が解決しない

根本原因

Windows と WSL の Linux ファイルシステム間の通信には、ネイティブなファイルシステムアクセスと比べてスループットが限られている Plan 9 (9P) プロトコル が使われています。 拡張機能が WSL 環境内にインストールされている場合、その一部はワークスペース全体に対して積極的なファイル監視やインデックス作成を行います。大規模なリポジトリ(例: 25 万以上のファイル、5 GB 以上)では、これによって 9P ブリッジ越しに膨大な量のファイルシステム操作が発生し、結果として次のような問題が起こりえます:
  • プロトコルの処理能力が飽和する
  • 数千件規模の「ファイルが見つからない」エラー (Reply_Rlerror) が発生する
  • Windsurf と WSL バックエンド間の接続が切断される
  • 時間の経過とともに WSL 内でメモリプレッシャーが増大する一因となる
これに加えて、複数の言語サーバー(例: Sorbet、Ruby LSP、TypeScript など)が同時に動作していると、さらにファイル監視のオーバーヘッドが発生します。拡張機能と言語サーバーによるファイルシステムアクティビティが合わさることで、32 GB 以上の RAM を搭載したシステムであっても 9P ブリッジが飽和してしまう可能性があります。 既知の例として Vue (Volar) 拡張機能 があり、ワークスペースに Vue ファイルが含まれていない場合でも、WSL 環境で過剰なファイルインデックス作成を引き起こすことが確認されています。この問題は VS Code エコシステムでも文書化されています: microsoft/vscode-remote-release#11091 特に、現在のプロジェクトには不要な VS Code や他のエディタから引き継いだ多数の拡張機能がインストールされている場合に、こうした問題が発生しやすくなります。

解決方法

1. WSL 内での Windsurf サーバーのクリーン再インストール

WSL 内の Windsurf サーバーディレクトリを削除し、次回接続時に Windsurf が自動的に再インストールするようにします。
rm -rf ~/.windsurf-server
その後、Windsurf を WSL に再接続してください。サーバーは自動的に再インストールされます。

2. インストールする拡張機能を最小限にする(効果大)

作業中のリポジトリで本当に必要な拡張機能だけをインストールしてください。
  • WSL に接続した状態で Windsurf の Extensions パネルを開く
  • WSL 環境にインストールされている拡張機能(ローカル側ではなく)を確認する
  • 不要な拡張機能を無効化またはアンインストールする — 特に重いファイル監視やインデックス作成を行うもの
WSL で問題が確認されている拡張機能:
  • Vue (Volar) — 非 Vue プロジェクトでも、9P ブリッジ越しに過剰なファイルインデックス作成を引き起こすことが確認されています。この拡張機能をアンインストールするだけで、複数ユーザーの切断問題が解消されています。
  • その他のフレームワーク固有の言語拡張機能(Angular、Svelte など)も、現在のワークスペースで不要なのにインストールされている場合、同様の挙動をする可能性があります。
ローカル(非 WSL)環境で問題なく動作する拡張機能が、WSL でも同じように振る舞うと決めつけないでください。ボトルネックになっているのは 9P ファイルシステムブリッジであり、ローカルでは無害な拡張機能でも、すべてのファイル操作がプロトコル境界を越える必要がある環境では不安定要因になり得ます。 拡張機能によるファイルシステムへのアクセスを減らすことは、そのまま 9P ブリッジへの負荷削減につながります。

3. WSL のリソース制限を最適化する

Windows ホスト上で %USERPROFILE%\.wslconfig ファイル(例: C:\Users\<YourUser>\.wslconfig)を作成または編集し、システムに適したリソース制限を設定します。
[wsl2]
memory=16GB
swap=4GB
processors=4
autoMemoryReclaim=gradual
お使いのシステムで利用可能なリソースに応じて値を調整してください。 ファイルを保存したら、WSL を再起動してください。
wsl --shutdown
その後、Windsurf を再度開き、WSL に再接続してください。

診断

9P エラーの WSL 診断ログを確認する

原因が 9P の飽和であることを確認するには、WSL の診断ログを収集してください。
wsl --debug-shell
あるいは、完全な診断バンドルを取得します:
Invoke-WebRequest -UseBasicParsing "https://aka.ms/wsldiag" -OutFile wsldiag.ps1
.\wsldiag.ps1
9P/ファイルシステムのログ内で Reply_Rlerror イベントが高頻度で発生していないか確認してください。数千件(またはそれ以上)のイベントが記録されている場合、WSL 内の拡張機能やプロセスが過剰なファイルシステム要求を発行しており、9P ブリッジがそれに追いつけていない可能性があります。

どの対処法をいつ使うか

  • WSL に多数の拡張機能をインストールしていて実際にはあまり使っていない場合、または別のエディタから拡張機能を移行してきた場合は、拡張機能を最小限に抑えます(最も効果の高い変更です)。
  • サーバーのクリーン再インストールは、Windsurf サーバーの状態が破損している、または古くなっている可能性がある場合(例:アップデートの失敗や過去のクラッシュ後など)に実行します。
  • .wslconfig の最適化は、WSL がホストのリソースを過剰に消費している場合、またはこれまでリソース制限を設定していない場合に行います(WSL 全体の安定性向上につながります)。
最良の結果を得るには、3 つすべてを適用してください。クリーンなサーバー、最小限の拡張機能、調整されたリソース制限の組み合わせにより、根本原因(拡張機能の動作による 9P の飽和)と、それに寄与する要因(リソース枯渇)の両方に対処できます。