会社のシステム(Maxscale経由でDBに接続)で負荷テストをしていたところ、不可解な接続エラーが発生していた。どうも新しいセッションが作成出来ないとの事なのだが、後ろのMariaDB側のMax Connection値は余裕がある。で、いろいろと調べていたところ、Maxscaleのエラーログに以下のようなエラーが出ていた。
2016-04-26 16:53:56 Error 24, Too many open files. Failed to accept new client connection.
Oh...(´・ω・`)
どうやら、ファイルディスクリプタが上限を超えてしまったらしい。デフォルトの値(1024)では足らぬようだ。
※現在のファイルディスクリプタ数は以下のコマンドで確認できる。
cat /proc/$(pgrep maxscale)/limits
[root@BS-PUB-GFRONT-01 ~]# cat /proc/$(pgrep maxscale)/limits | awk '{if(NR==1 || /Max open files/) print}'
Limit Soft Limit Hard Limit Units
Max open files 1024 4096 files
とにかく、足らないなら上限を引き上げるしかない。
Maxscaleのファイルディスクリプタを引き上げるには、「/usr/lib/systemd/system/maxscale.service」で、「[Service]」以下に「LimitNOFILE=65536」を追記してやり、サービスを再起動してやれば良い(CentOS 7の場合)。
●/usr/lib/systemd/system/maxscale.service
…
[Service]
…
LimitNOFILE=65536
…
追記したら、以下のコマンドでMaxscaleを再起動する。
systemctl daemon-reload
systemctl restart maxscale
これで、ファイルディスクリプタの上限が変更できた。
[root@BS-PUB-GFRONT-01 ~]# cat /proc/$(pgrep maxscale)/limits | awk '{if(NR==1 || /Max open files/) print}'
Limit Soft Limit Hard Limit Units
Max open files 65536 65536 files