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