node.jsでconnect EMFILE、too many open filesが出た時の対処方法

node.jsで接続数1000件超えたあたりから出る。

error when connecting to db: { [Error: connect EMFILE]
code: 'EMFILE',
errno: 'EMFILE',
syscall: 'connect',
fatal: true }

原因

ulimit -n
1024

ファイルオープンの上限数が1024になっている。

ulimit -n 65535

↑だと次回ログイン時に戻ってしまうので運営には不向き

ファイルオープンの上限数を変更する

vi /etc/security/limits.conf

root soft nofile 65536
root hard nofile 65536

一旦ログアウト、ログイン

次回ログイン時から、反映されるので一旦ログアウトしてから、最ログイン。

ulimit -n
65535

プロセスを停止&開始

forever restartallだと、反映されないので、
一旦、

forever stopall

でnodejsの全プロセスを停止させてから新規でプロセスを立ち上げる。

メモ

  • ulimit -n 65535した上で、一旦nodejsのプロセスを停止させて、新規で立ち上げる(restartじゃ駄目)
  • /etc/security/limits.confに設定すれば永久設定できるので便利