会社のシステム(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