komeの備忘録

東大院卒外資ITエンジニアの技術ブログ

Ubuntu18.04でSystem limit for number of file watchers reachedが出たので直した

はじめに

Node.jsの環境でnpm runでアプリケーションを実行したら、以下のエラーが出た。

Error: ENOSPC: System limit for number of file watchers reached, watch

原因を調査したら、以下のブログがヒットした。
これはUbuntuのNode.jsに限った話ではなく、Linuxでファイル監視が働くようなアプリケーションを実行する際に発生しうるエラーらしい。

www.virment.com

環境

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

(C) komee.org