systemd で ulimit 上げるときの推奨の方法
TL;DR
- ユニット設定ファイルに LimitNOFILE を書く
/etc/systemd/system/<unit>.d/override.conf
に書くとなおよい
経緯
CentOS 7 に MariaDB を構築していて、my.cnf に下記設定を入れていました。
open-files-limit = 65536
しかし、プロセスの Limit を調べてみると 1024 になっていて、ログにもその旨が出ています。
# cat /proc/`pidof mysqld`/limits | grep -i "max open files"
Max open files 1024 4096 files
# tailf /var/log/mariadb/mariadb.log
...snip...
150712 16:48:49 [Warning] Could not increase number of max_open_files to more than 1024 (request: 2159)
...snip...
おすすめの設定方法
systemd のユニット設定ファイルに LimitNOFILE を書くことで制限を緩和できますが、rpm で配置されるユニット設定ファイルには、あまり触れたくありません。
そこで下記のように、"ユニット名.d" でディレクトリを掘り、その中に上書きしたい項目だけ記述します。ファイル名は override.conf でなくても良いです。
/etc/systemd/system/mariadb.service.d/override.conf
[Service]
LimitNOFILE=65536
反映されました。
# systemctl daemon-reload
# systemctl restart mariadb.service
# cat /proc/`pidof mysqld`/limits | grep -i "max open files"
Max open files 65536 65536 files
おわりに
よくよく見ると、rpm で配置された /usr/lib/systemd/system/mariadb.service
の中のコメントにこんな記述があったのでした。
# For example, if you want to increase mariadb's open-files-limit to 10000,
# you need to increase systemd's LimitNOFILE setting, so create a file named
# "/etc/systemd/system/mariadb.service.d/limits.conf" containing:
# [Service]
# LimitNOFILE=10000