[Node.js] Error: ENFILE: file table overflow, open xxx の解決方法
Node.js で Error: ENFILE: file table overflow, open xxx が発生したときの解決方法をご紹介します。
ファイルディスクリプタ数の上限変更
Error: ENFILE: file table overflow, open xxx はファイルディスクリプタ数の上限を超えたときに発生するエラーです。
なので、解決方法はファイルディスクリプタ数の上限を増やすだけでよいです。
今回は MacOS でエラーが発生したので、Macのファイルディスクリプタ上限を上げる – 橋本商会 を参考にして対応しました。
File descriptors の確認
$ ulimit -a -t: cpu time (seconds) unlimited -f: file size (blocks) unlimited -d: data seg size (kbytes) unlimited -s: stack size (kbytes) 8192 -c: core file size (blocks) 0 -v: address space (kbytes) unlimited -l: locked-in-memory size (kbytes) unlimited -u: processes 709 -n: file descriptors 256 |
plist ファイル追加・更新
/Library/LaunchDaemons/ に以下の2ファイルを追加・更新します。
limit.maxfiles.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>limit.maxfiles</string> <key>ProgramArguments</key> <array> <string>launchctl</string> <string>limit</string> <string>maxfiles</string> <string>524288</string> <string>524288</string> </array> <key>RunAtLoad</key> <true/> <key>ServiceIPC</key> <false/> </dict> </plist> |
limit.maxproc.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple/DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>limit.maxproc</string> <key>ProgramArguments</key> <array> <string>launchctl</string> <string>limit</string> <string>maxproc</string> <string>2048</string> <string>2048</string> </array> <key>RunAtLoad</key> <true /> <key>ServiceIPC</key> <false /> </dict> </plist> |
追加した plist の所有権を root にする。
sudo chown root /Library/LaunchDaemons/limit.max*.plist |
plist の設定を有効にする。
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist sudo launchctl load -w /Library/LaunchDaemons/limit.maxproc.plist |
ここで、OS を再起動します。
変更後 File descriptors の確認
ulimit -a -t: cpu time (seconds) unlimited -f: file size (blocks) unlimited -d: data seg size (kbytes) unlimited -s: stack size (kbytes) 8192 -c: core file size (blocks) 0 -v: address space (kbytes) unlimited -l: locked-in-memory size (kbytes) unlimited -u: processes 2048 -n: file descriptors 524288 |
以上、突然の Error: ENFILE: file table overflow, open xxx に悩まされた現場からお送りしました。