はじめに
Node.jsの環境でnpm runでアプリケーションを実行したら、以下のエラーが出た。
Error: ENOSPC: System limit for number of file watchers reached, watch
原因を調査したら、以下のブログがヒットした。
これはUbuntuのNode.jsに限った話ではなく、Linuxでファイル監視が働くようなアプリケーションを実行する際に発生しうるエラーらしい。
環境
Ubuntu18.04 Desktop
Node.js 10.17.0
原因と対処
上記のリンクに詳しくまとめられていてとても助かった。
エラーの原因は、エラーメッセージの通り監視対象のファイル数の上限に達していたかららしい。
なのでファイル数の上限を確認し、上限を大きくして解決を図る。
上限の確認
次のコマンドでファイル監視数の上限を確認できる。デフォルトは8192となっており、私の環境でも8192であった。
$ cat /proc/sys/fs/inotify/max_user_watches 8192
上限値の拡大
下記のコマンドで永続的に拡大する。 まず/etc/sysctl.confに設定を追記し、sysctl -p で読み込ませる。
$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf $ sudo sysctl -p
以降はシステムが起動するたびに読み込まれる。
まとめ
もともと今回の環境はMacでは普通に動いていた環境だったため、Linux特有の問題であった。
Ubuntuに限らず、多くのOSで参考にしてほしい。
参考にしたサイト
LinuxでSystem limit for number of file watchers reachedが出る原因と対策
Increasing the amount of inotify watchers · guard/listen Wiki · GitHub