VSCodeの入力補完が効かなくなった

目次
  1. 現象
  2. 原因
  3. 対処方法
  4. inotifyとは?
  5. 参考

現象

VSCodeのRemote - SSHでAmazon Linux 2上のソースを開いた際に Visual Studio Code is unable to watch for file changes in this large workspaceという警告が出ました。

これにより拡張機能C#の自動補完が効かなくなってしまいました。

原因

Linuxのファイルシステム上の監視対象ファイル数上限を超えた際にこのエラーが出ます。

現在の監視対象ファイル数は下記コマンドで確認できます。

$ cat /proc/sys/fs/inotify/max_user_watches

対処方法

下記のコマンドを叩き、監視対象ファイルの数の上限を上げます。 あまり一気に数値を上げ過ぎるとメモリを食いますので、freeコマンド等で様子を見ながら2倍、3倍と段階的に上げるのが良いと思います。

# 32768の部分は任意の数値を指定
$ echo fs.inotify.max_user_watches=32768 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
# 設定値が反映されているか確認する
$ cat /proc/sys/fs/inotify/max_user_watches

これで正しく補完が効くようになるはずです。 もし反映されないようであれば、VSCodeを再起動してみるとうまくいくと思います。

inotifyとは?

Linuxカーネルのサブシステムで、ファイルシステムの変更をアプリケーションに通知する機能を持ちます。Linuxカーネルのver2.6.13以降から組み込まれたようです。

参考

https://zukucode.com/2018/01/linux-watch.html

https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc

https://kazmax.zpp.jp/cmd/i/inotify.7.html