Last Update:29 Nov. 2004
■ユーザリソースを制限する方法について

1.はじめに

■はじめに

  Linuxでは、ulimitコマンドなどを使って、ユーザごとに使用可能なシステムリソースを
  制限する事が可能です。

■ulimitコマンドとは

  ulimitコマンドはシステムリソースの制限を設定するためのコマンドです。
  プロセスがメモリやCPUタイム等を多く消費しないようにするために、ユーザごとに制限を
  設定することができます。
  また、オプション指定により、ハードリミット、ソフトリミットを指定する事ができます。

  ここでは ulimit コマンドで使用できるメモリの容量を制限する方法について説明していきます。


2.ユーザリソースを制限する方法

■全てのリソースの制限の表示

  まず、root権限で ulimit コマンドを実行し、現在の設定を確認します。
# ulimit -a
core file size (blocks)      0
data seg size (kbytes)       unlimited
file size (blocks)           unlimited
max locked memory (kbytes)   unlimited
max memory size (kbytes)     unlimited
open files                   1024
pipe size (512 bytes)        8
stack size (kbytes)          8192
cpu time (seconds)           unlimited
max user processes           1024
virtual memory (kbytes)      unlimited
  なお、ulimit コマンドを実行する場合、ハードリミットを設定したい場合は -H 、
  ソフトリミットを設定したい場合は-S のオプションを指定しますが、どちらも指定しないと
  両方に制限がかけられる事になります。
  また、ソフトリミットを設定する場合は、ハードリミットの範囲内での設定になります。


■ファイルサイズを制限する方法

  ファイルサイズを制限する場合には -f オプションを使用し、制限するサイズをブロック単位で指定します。
  ここでは、1ブロック=512KB とし、ファイルサイズを4MBに制限しています。(512KB × 8 = 4MB)
# ulimit -f 8
core file size (blocks)      0
data seg size (kbytes)       unlimited
file size (blocks)           8

   :


■メモリの使用量を制限する方法

  メモリの使用量を制限する場合には -m オプションを使用し、制限する
  メモリの使用量をKB単位で指定をします。
  ここではユーザ1人辺りのメモリの使用量を256MBに制限します。
  (256MBの場合、256×1024=262144(KB))
# ulimit -m 262144
core file size (blocks)      0
data seg size (kbytes)       unlimited
file size (blocks)           unlimited
max locked memory (kbytes)   unlimited
max memory size (kbytes)     262144
open files                   1024
pipe size (512 bytes)        8
stack size (kbytes)          8192
cpu time (seconds)           unlimited
max user processes           1024
virtual memory (kbytes)      unlimited
  これで、ユーザ1人辺りのメモリの使用量が256MBに制限されました。


■プロセスのCPUタイムを制限する方法

  各プロセスに使用される時間を制限する場合は、秒数で指定します。
  ここでは180と設定しているので各プロセスに使用される時間は3分まで
  ということになります。
# ulimit -t 180

   :

cpu time (seconds)           180
max user processes           1024
virtual memory (kbytes)      unlimited

■仮想メモリの使用量を制限する方法

  仮想メモリの使用量を制限する場合にもメモリを制限する時と同様に
  KB単位で使用量の設定を行います。 131072KB = 128MB
# ulimit -v 131072

   :
   :

virtual memory (kbytes)      131072

■注意事項

  ハードリミットを設定すると、一般ユーザはハードリミットの範囲内でしか値を変更する事ができません。
  一般ユーザが設定された値より大きな値にシステムリソースの値を変更しようとした場合には、
  以下の様なエラーが表示されます。
  一度設定したハードリミットをそれより大きな値に変更するためには root 権限が必要になります。
# ulimit -m 131072
core file size (blocks)      0
data seg size (kbytes)       unlimited
file size (blocks)           unlimited
max locked memory (kbytes)   unlimited
max memory size (kbytes)     131072
open files                   1024
pipe size (512 bytes)        8
stack size (kbytes)          8192
cpu time (seconds)           unlimited
max user processes           1024
virtual memory (kbytes)      unlimited

# su admin
$ ulimit -m 262144
bash: ulimit: cannot modify limit: Operation not permitted
$
  なお、ulimitコマンドには以下のようなオプションが用意されています。

[ulimit のオプションの一例]
オプション意味対応行
-a全ての制限の表示all
-cコアファイルのサイズcore file size
-dプロセスのデータセグメントのサイズdata seg size
-fファイルサイズfile size
-m使用可能な最大メモリ容量max memory size
-nアクセス可能な最大ファイル数open files
-pパイプサイズpipe size
-sプロセスのスタッグセグメントstack size
-tプロセスのCPUタイムcpu time
-u使用可能な最大プロセス数max user processes
-v仮想メモリvirtual memory



BACKUP