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に設定すれば永久設定できるので便利