見出し画像

CentOS(Linux)で監視数の上限を超えてエラーが発生したときの対処

はじめに

こんにちは、SHIFT の開発部門に所属しているmurasawaです。今期より中途で入社、バックエンド関連の開発を担当して行きます。

現在、研修でデータベースやRestAPIについて基本的な事から学んでいます。学んだことをアウトプットし理解を深めていくとともに技術の共有として役に立てば幸いです。

原因

Linuxではinotifyという仕組みを使ってファイル監視を行っています。

監視を行う処理がシステムで設定されている監視対象ファイルの上限数を超えたときに発生するエラーです。デフォルトでは上限数が8192に設定されていて、監視数がこの値を超えたため下記

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

のエラーが発生します。

上限数の確認方法

以下コマンドで確認できます。

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

出力

8192

対応方法

一時的

sysctlで一時的に上限数を上げることができます。
最大値は1048576です。
再起動等するとデフォルトの値に戻るので確認の際に使用してください。

$ sudo sysctl fs.inotify.max_user_watches=16384
fs.inotify.max_user_watches = 16384

確認

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

恒久的

設定を恒久的に反映させたい場合は以下のコマンドを実行します。
大きな数値にしすぎるとパフォーマンスに影響する可能性があります。
必要な分だけ数値を上げて下さい。

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

終わりに

特にメモリに制約のある環境にいる場合は、必要以上に上限数を上げないことをお勧めします。各ファイルウォッチは540バイト(32ビット)または約1kB(64ビット)を使用するため、1048576ウォッチがすべて消費されると仮定すると、上限は約512MB(32ビット)または1048MB(64ビット)になります。

__________________________________

執筆者プロフィール:Satoshi Murasawa
前社ではRPAツールの技術サポート、開発を1年半経験。 SHIFTでは、バックエンドエンジニアとして入社し、node.jsやmysqlに触れはじめた。
DBに漠然とした興味があり、勉強して部の中でDB関連で役割を持つことができたらよいなと思っています。


お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/