Alpine Linuxでulimitの上限を引き上げる
Alpine Linuxでlimits.conf, PAM, デーモンのファイルディスクリプタの制限を引き上げる。
AlpineLinuxLinuxシステム管理デフォルトのファイルオープン数上限は低い
$ ulimit -Hn
4096
$ ulimit -Sn
1024
やること
ulimit コマンドで上限を一時的に増やせるが永続化する。
対象環境は OpenRC, OpenSSH
シェルとデーモンそれぞれの方法を書く。
設定操作は root ユーザーで行う。
SSH ログイン先シェルで有効にする方法
- 上限設定を追加する
/etc/security/limits.conf
に追記する/etc/security/limits.d/任意ファイル名.conf
として新規作成したファイルに記述する
いずれかの方法で以下の設定を追加する。
* soft nofile 65535
* hard nofile 65535
(とりあえず個人環境なので全ユーザーに大きい値を設定する例)
- 無ければ openssh-server-pam パッケージをインストールする
apk add openssh-server-pam
- OpenSSH で PAM を使用する
/etc/ssh/sshd_config
のUsePAM
を yes にする。
UsePAM yes
- OpenSSH を再起動
rc-service sshd restart
これで SSH ログインすると上限が引き上げられている。
$ ulimit -Hn
65536
$ ulimit -Sn
65536
デーモンで有効にする方法
このマシンでは OpenVPN を起動しているので例にする。
OpenRC デーモンの ulimit は先の PAM の設定とは独立しているので低いままだ。
$ cat /proc/$(pgrep openvpn)/limits
Limit Soft Limit Hard Limit Units
(省略)
Max open files 1024 4096 files
(省略)
2 つの方法でファイルオープン数上限を 10000 にする例を記す
方法
その 1 /etc/conf.d/サービス名
に書く
サービスごとのデーモンファイルに直接書く。
OpenVPN の場合は /etc/conf.d/openvpn
rc_ulimit="-n 10000"
その 2 /etc/rc.conf
を書く
https://github.com/OpenRC/openrc/blob/master/user-guide.md#ulimit-and-cgroups
OpenRC のデフォルト値は rc.conf で書ける。
# Pass ulimit parameters
# If you are using bash in POSIX mode for your shell, note that the
# ulimit command uses a block size of 512 bytes for the -c and -f
# options
# rc_ulimit="-u 30"
# 追加
rc_ulimit="-n 10000"
いずれかの方法でサービスまたはマシン再起動後に確認すると設定した数になっている。
※ 明示的な設定値無しでサービス再起動を行うと操作シェルの ulimit が適用されるような動きに見えたのでマシン再起動が確実
# rc-service openvpn restart
# cat /proc/$(pgrep openvpn)/limits
Limit Soft Limit Hard Limit Units
(省略)
Max open files 10000 10000 files
(省略)
まとめ
OpenSSH + PAM のシェルとデーモンの ulimit 指定方法を書いた。
/bin/login から入る直接操作するシェルの ulimit は未解決
試して気づいたが、PAM 設定無しでも /etc/rc.conf または /etc/conf.d/sshd に rc_ulimit を設定することで sshd の子プロセスであるシェルもデフォルトで同じ ulimit を持つ。
2268 ? Ss 0:00 sshd: user [priv]
2270 ? S 0:00 \_ sshd: user@pts/0
2271 pts/0 Ss 0:00 \_ -ash
正攻法ではなさそうだけれど、個人用 で 壊れてもいい環境 で SSH 操作 がメインだったら /etc/rc.conf
の rc_ulimit
へ適当な大きな値の設定をするだけですみそう。
発端
Alpine Linux 3.17 を入れている環境に Podman で MariaDB を建てようとしたときにファイルディスクリプタ数の Warning が出てきたので、動かないわけではないがメッセージを消すための対処。
2023-01-08 9:51:14 0 [Warning] Could not increase number of max_open_files to more than 4096 (request: 32183)
2023-01-08 9:51:14 0 [Warning] Changed limits: max_open_files: 4096