2012年12月7日金曜日

ユーザ単位でのシステムリソース制限

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)しない!!