VS Code(Linux)で「ENOSPC: System limit for number of file watchers reached」を修正する

beginner💻 VS Code2026-05-09| Linux(Ubuntu、Debian、Fedora、Arch)、VS Code 1.x、Node.jsプロジェクト

Error Message

Error: ENOSPC: System limit for number of file watchers reached
#linux#ファイル監視#enospc#パフォーマンス

状況

LinuxマシンでVS Codeを開いたとき — Node.jsのモノリポ、node_modulesが大量にあるReactアプリ、または大規模なワークスペース — 以下のエラーが表示されることがあります:

Error: ENOSPC: System limit for number of file watchers reached, watch '/home/user/project/src'

VS Codeがファイル変更の追跡を停止します。ESLintが応答しなくなります。TypeScriptが編集内容を見失います。ライブリロードが無効になります。場合によっては、エラーが表示されないままエディタが重くなることもあります。

何が起きているのか

Linuxはファイルの変更を監視するためにinotifyを使用しています。カーネルは1ユーザーが保持できるファイル監視数の上限を設けており、デフォルト値は8192です。VS Codeと拡張機能(ESLint、TypeScriptサーバー、Prettier)、さらにwebpackやViteなどのビルドツールを組み合わせると、中規模のプロジェクトでもあっさりこの上限に達してしまいます。

現在の上限を確認するには:

cat /proc/sys/fs/inotify/max_user_watches

8192、または65536未満の値が表示された場合 — それが原因です。

inotifyインスタンスの上限も確認しましょう(監視数とは別の設定です):

cat /proc/sys/fs/inotify/max_user_instances

デフォルトは128です。この値が低いと、同じ種類のクラッシュが別の形で発生することがあります。

一時的な修正(再起動まで有効)

設定ファイルを変更せずに、すぐに上限を引き上げます:

sudo sysctl fs.inotify.max_user_watches=524288

カーネルに即座に反映されます。その後VS Codeを再起動してください — 新しい監視スロットを確保するために再起動が必要です。動作確認に使える方法ですが、再起動後は上限がデフォルト値にリセットされます。

恒久的な修正

2つの方法があります。環境に合った方を選んでください。

オプションA — sysctl.confを直接編集する

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

オプションB — 専用の設定ファイルを作成する(推奨)

echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/60-vscode-watches.conf
sudo sysctl --system

sysctl.d/に個別ファイルを作成することで、変更を分離して管理できます。追跡しやすく、削除も簡単です。

修正の確認

新しい値が反映されているか確認します:

cat /proc/sys/fs/inotify/max_user_watches
# 出力されるべき値: 524288

VS Codeを再起動してプロジェクトを再度開いてください。エラーが消えます。拡張機能が再び動作し始め — TypeScriptが変更を検出し、ESLintがリアルタイムでハイライトし、ライブリロードが再び機能します。

再起動後も設定が維持されることを確認したい場合:

sudo reboot
# ログイン後:
cat /proc/sys/fs/inotify/max_user_watches

まだ524288が表示されていれば完了です。

なぜ524288なのか

VS Code公式のLinuxセットアップドキュメントで推奨されている値です。大規模なモノリポを含むほとんどのプロジェクトで十分な値です。メモリに制約のあるサーバーでは、65536131072が現実的な妥協点です。

inotifyの監視1件あたり約1 KBのカーネルメモリを使用します。つまり524288件の監視 = 最悪のケースで約512 MBです。実際には、VS Code + Node.js + webpackを使用する開発マシンでも50,000〜100,000件程度の監視数に収まります。上限に近づくことはほとんどありません。

まだエラーが出る場合

上限を引き上げてもまだエラーが発生する場合は、以下の点を確認してください:

  • VS Codeでnode_modulesを除外する — 設定を開き、files.watcherExcludeに追加します:

"files.watcherExclude": { "/node_modules/": true, "/.git/": true, "/dist/": true }

    これだけで監視数を数万件削減できることがあります。
  
  - **`max_user_instances`も引き上げる** — この値も低い場合は、同じ設定ファイルに追加します:
    ```
echo fs.inotify.max_user_instances=512 | sudo tee -a /etc/sysctl.d/60-vscode-watches.conf
sudo sysctl --system
  • 複数のVS Codeウィンドウと拡張機能 — 開いているウィンドウごとに独自の監視セットが作成されます。使っていないウィンドウは閉じましょう。
  • 他のツールが監視数を消費している — Dropbox、Syncthing、webpackの開発サーバーもinotifyを使用します。最も消費しているプロセスを特定するには:

アクティブなinotify監視数の合計を確認:

cat /proc//fdinfo/ 2>/dev/null | grep -c inotify

どのプロセスが使用しているか確認:

find /proc/*/fd -lname anon_inode:inotify 2>/dev/null |
cut -d/ -f3 | xargs -I{} ps -p {} -o comm= 2>/dev/null |
sort | uniq -c | sort -rn | head -20

  

## WSL2ユーザーへの注意
Remote-WSL経由でVS Codeを使用していてこのエラーが発生した場合も、修正方法は同じです — `sysctl`コマンドはWindows PowerShellではなく、WSL2のLinuxシェル内で実行してください。inotifyの上限はLinuxカーネルの設定であり、Windowsには存在しません。

Related Error Notes