linuxでユーザごとにシステムリソースの制限をかける。
linuxでkernel単位でシステムリソースの制限をかける場合はこちらを参照のこと。
linuxサーバ構築時に設定が必須のパラメータと言えば/etc/sysctl.confである。
しかしここはカーネルパラメータを記述する設定ファイルであり、
つまりシステム全体で利用可能なリソースの制限を行うためのファイルである。
ユーザ単位での上限は変更できない。
ulimitコマンドを使えば設定を変更することができる。
サーバ再起動時には元に戻るので、設定を永続的にするためには、
/etc/security/limits.confに記述しておく必要がある。
サーバのチューニング時に必ずするポイントの一つだろう。
例としてファイルディスクリプタ数とプロセス数を30000に変更する。
◆ testというユーザの現在のシステムリソースの制限値を確認する
% su - test
% ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 4096
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024 ←ここを変更する(ファイルディスクリプタ)
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 1024
cpu time (seconds, -t) unlimited
max user processes (-u) 1024 ←ここを変更する(プロセス数)
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
◆ testユーザの制限を変更する
% ulimit -S -H -n 2048
-S : ソフトリミット
-H : ハードリミット
-n : ファイルディスクリプタ数
"ulimit -a"の結果からオプションは確認できる。"open files (-n)"
◆ testユーザの変更されたシステムリソースの制限値を確認する
% ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 4096
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 30000 ←変更されている
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 1024
cpu time (seconds, -t) unlimited
max user processes (-u) 30000 ←変更されている
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
◆ testユーザの制限をサーバの再起動時にも有効にする。
% su -
# cp /etc/security/limits.conf /etc/security/limits.conf.default
# vi /etc/security/limits.conf
test soft nofile 30000 ←ファイルディスクリプタのソフトリミット
test hard nofile 30000 ←ファイルディスクリプタのハードリミット
test soft nproc 30000 ←プロセス数のソフトリミット
test hard nproc 30000 ←プロセス数のハードリミット
limits.confの記載とulimitコマンド実行時の文言は下記のようになっている。
◆ limits.conf設定とulimitコマンド設定時のキーの対応表
limits.conf設定 ulmitコマンド表示
core limits the core file size (KB)
data max data size (KB)
fsize maximum filesize (KB)
memlock max locked-in-memory address space (KB)
nofile max number of open files
rss max resident set size (KB)
stack max stack size (KB)
cpu max CPU time (MIN)
nproc max number of processes
as address space limit (KB)
maxlogins max number of logins for this user
maxsyslogins max number of logins on the system
priority the priority to run user process with
locks max number of file locks the user can hold
sigpending max number of pending signals
msgqueue max memory used by POSIX message queues (bytes)
nice max nice priority allowed to raise to values: [-20, 19]
rtprio max realtime priority
追記
意図したlimitの設定通りに動作しない問題にぶつかった。
下も合わせて参照した方がいい。
コアダンプ(core dump)しない!!