Go to main content
マニュアルページ セクション 5: 標準、環境、マクロ

印刷ビューの終了

更新: 2016年12月6日
 
 

resource-controls (5)

名前

resource-controls - プロジェクトデータベースから使用可能なリソース制御

説明

リソース制御の機能は、プロジェクトデータベースから構成されます。project(4) を参照してください。リソース制御は、次のユーティリティーから設定および変更できます:

プログラムでは、setrctl(2) を使用してリソース制御値を設定します。

前のリソース制御に加えて、pooladm(1M) および poolcfg(1M) ユーティリティーからアクセス可能なリソースプールもあります。プログラムでは、リソースプールは libpool(3LIB) ライブラリから操作できます。

使用可能なリソース制御を次に示します:

process.max-address-space

このプロセスで使用できる、セグメントサイズについて集計されたアドレス空間の最大量で、バイト数で表現されます。

process.max-core-size

このプロセスによって作成されるコアファイルの最大サイズで、バイト数で表現されます。

process.max-cpu-time

このプロセスで使用できる最大 CPU 時間で、秒数で表現されます。

process.max-data-size

このプロセスで使用できる最大ヒープメモリーで、バイト数で表現されます。

process.max-file-descriptor

このプロセスで使用できる最大のファイル記述子インデックスで、整数で表現されます。

process.max-file-size

このプロセスでの書き込みに使用できる最大ファイルオフセット。バイト数で表現されます。

processs.max-itimers

インターバルタイマーの許容可能な最大数で、整数で表現されます。

process.max-msg-messages

メッセージキュー上のメッセージの最大数 (msgget() の時点でリソース制御からコピーされる値) で、整数で表現されます。

process.max-msg-qbytes

メッセージキュー上のメッセージの最大バイト数 (msgget() の時点でリソース制御からコピーされる値) で、バイト数で表現されます。

process.max-port-events

イベントポートごとのイベントの許容可能な最大数で、整数で表現されます。

process.max-sem-nsems

セマフォーセットごとに許可されるセマフォーの最大数で、整数で表現されます。

process.max-sem-ops

semop 呼び出しごとに許可されるセマフォー操作の最大数 (semget() の時点でリソース制御からコピーされる値)。整数で表現され、操作の数を指定します。

process.max-sigqueue-size

プロセスが保有できるキューに入れられた未処理のシグナルの最大数。

process.max-stack-size

このプロセスで使用できる最大スタックメモリーセグメントで、バイト数で表現されます。

project.cpu-caps

プロジェクトで使用できる CPU リソースの最大容量。使用される単位は、プロジェクト内のすべてのユーザースレッドで使用できる 1 つの CPU の割合 (%) です。整数で表現されます。リアルタイムスケジューリングクラスで実行されているスレッドに上限は適用されません。このリソース制御は、syslog アクションをサポートしていません。

project.cpu-shares

公平配分スケジューラで使用するためにプロジェクトに付与される CPU 共有の数 (FSS(7) を参照)。使用される単位は共有の数 (整数) です。このリソース制御は、syslog アクションをサポートしていません。

project.max-contracts

プロジェクト内で許可される契約の最大数で、整数で表現されます。

project.max-crypto-memory

暗号化操作に使用できるカーネルメモリーの最大容量。カーネル内のバッファーおよびセッション関連の構造体の割り当ては、このリソース制御に対してチャージされます。

process.max-deferred-posts

許可される遅延ポストの最大数で、整数で表現されます。

project.max-locked-memory

デバイスドライバとユーザープロセス (DISM/ISM/OSM を含む) によってロックされた物理メモリーの合計容量であり、バイト数として表されます。

project.max-lwps

プロジェクトで同時に使用できる LWP の最大数で、整数で表現されます。

project.max-msg-ids

プロジェクトに対して許可されるメッセージキュー ID の最大数で、整数で表現されます。

project.max-port-ids

イベントポートの許容可能な最大数で、整数で表現されます。

project.max-processes

プロジェクトで同時に使用できるプロセスの最大数で、整数で表現されます。

project.max-sem-ids

プロジェクトに対して許可されるセマフォー ID の最大数で、整数で表現されます。

project.max-shm-ids

プロジェクトに対して許可される共有メモリー ID の最大数で、整数で表現されます。

project.max-shm-memory

プロジェクトに対して許可される共有メモリーの合計容量で、バイト数で表現されます。

project.max-tasks

プロジェクト内で許容可能なタスクの最大数で、整数で表現されます。

project.pool

指定されたリソースプールをプロジェクトにバインドします。

rcap.max-rss

プロジェクト内のプロセスで使用できる物理メモリーの合計容量 (バイト単位)。

task.max-cpu-time

このタスクのプロセスで使用できる最大 CPU 時間で、秒数で表現されます。

task.max-lwps

このタスクのプロセスで同時に使用できる LWP の最大数で、整数で表現されます。

task.max-processes

タスクで同時に使用できるプロセスの最大数で、整数で表現されます。

次のゾーン規模のリソース制御を使用できます:

zone.cpu-cap

ゾーンで使用できる CPU 時間に対して制限を設定します。使用される単位は、ゾーン内のすべてのユーザースレッドで使用できる 1 つの CPU の割合 (%) です。整数で表現されます。上限が設けられたゾーン内のプロジェクトに独自の上限がある場合は、最小値が優先されます。このリソース制御は、syslog アクションをサポートしていません。

zone.cpu-shares

ゾーンに対する公平配分スケジューラ (FSS) CPU 共有の数に制限を設定します。CPU 配分は、まずゾーンに対して割り当てられたあとで、project.cpu-shares エントリの指定に従って、ゾーン内のプロジェクトに分配されます。整数で表現されます。このリソース制御は、syslog アクションをサポートしていません。

zone.max-locked-memory

ゾーンで使用できるロックされた物理メモリーの合計量。

zone.max-lofi

ゾーンで使用できる lofi(7D) デバイスの最大数。

zone.max-lwps

1 つのゾーン内の LWP が多すぎて、ほかのゾーンに影響を与えることがないようにすることで、リソースの分離を強化します。ゾーンの LWP の合計数は、project.max-lwps エントリを使用すると、ゾーン内のプロジェクト間でさらに再分割できます。整数で表現されます。

zone.max-msg-ids

ゾーンに対して許可されるメッセージキュー ID の最大数で、整数で表現されます。

zone.max-processes

ゾーンで同時に使用できるプロセスの最大数で、整数で表現されます。

zone.max-sem-ids

ゾーンに対して許可されるセマフォー ID の最大数で、整数で表現されます。

zone.max-shm-ids

ゾーンに対して許可される共有メモリー ID の最大数で、整数で表現されます。

zone.max-shm-memory

ゾーンに対して許可される共有メモリーの合計容量で、バイト数で表現されます。

zone.max-swap

このゾーンのユーザープロセスのアドレス空間マッピングと tmpfs マウントで消費できるスワップの合計量。

zones(5) を参照してください。

リソース制御で使用される単位

リソース制御は、サイズ (バイト)、時間 (秒)、または数 (整数) の単位で表現できます。これらの単位は、次に指定されている文字列を使用します。

Category             Res Ctrl      Modifier  Scale
                     Type String
-----------          -----------   --------  -----
Size                 bytes         B         1
                                   KB        2^10
                                   MB        2^20
                                   GB        2^30
                                   TB        2^40
                                   PB        2^50
                                   EB        2^60

Time                 seconds       s         1
                                   Ks        10^3
                                   Ms        10^6
                                   Gs        10^9
                                   Ts        10^12
                                   Ps        10^15
                                   Es        10^18

Count                integer       none      1
                                   K         10^3
                                   M         10^6
                                   G         10^9
                                   T         10^12
                                   P         10^15
                                   Es        10^18

リソース制御に倍率値を使用できます。次の例は、倍率付きのしきい値を示します。

task.max-lwps=(priv,1K,deny)

project ファイルでは、1K の値が 1000 に展開されます:

task.max-lwps=(priv,1000,deny)

2 番目の例では、より大きな倍率値が使用されています:

process.max-file-size=(priv,5G,deny)

project ファイルでは、5G の値が 5368709120 に展開されます:

process.max-file-size=(priv,5368709120,deny)

前の例では、上の表で指定されている倍率が使用されています。

単位修飾子 (たとえば、5G) が prctl(1)projadd(1M)、および projmod(1M) コマンドで受け入れられています。プロジェクトデータベース自体で単位修飾子を使用することはできません。

リソース制御値と特権レベル

リソース制御に対するしきい値によって、ローカルアクションをトリガーできるか、または (ロギングなどの) グローバルアクションを実行できる時点が構成されます。

リソース制御に対する各しきい値は、特権レベルに関連付けられている必要があります。特権レベルは、次の 3 つの種類のいずれかである必要があります:

basic

呼び出し元プロセスの所有者が変更できます。

privileged

現在のプロセス (sys_resource 特権が必要) または prctl(1) (proc_owner 特権が必要) が変更できます。

system

オペレーティングシステムインスタンスの期間中は固定されます。

リソース制御は、システムまたはリソースプロバイダで定義された 1 つの system 値を持つことが保証されます。system 値は、オペレーティングシステムの現在の実装で提供できるリソースの量を表します。

特権値はいくつでも定義できます。基本値は 1 つだけ許可されます。特権値を指定しないで実行される操作には、デフォルトで、基本レベルの特権が割り当てられます。

リソース制御値の特権レベルは、リソース制御ブロックの特権フィールドで RCTL_BASICRCTL_PRIVILEGED、または RCTL_SYSTEM として定義されます。詳細は、setrctl(2) を参照してください。prctl コマンドを使用すると、基本レベルおよび特権レベルに対応付けられている値を変更できます。

privileged の特権レベルを指定する場合は、priv の省略形を使用できます。例:

task.max-lwps=(priv,1K,deny)

リソース制御値に対応付けられた大域アクションと局所アクション

リソース制御値に関するアクションには、グローバルとローカルの 2 つのカテゴリがあります。

グローバルアクションは、システム上のすべてのリソース制御のリソース制御値に適用されます。rctladm(1M) を使用して次のアクションを実行できます。

  • アクティブなシステムリソース制御のグローバルな状態を表示します。

  • 大域ログ作成アクションを設定します。

リソース制御に対応付けられた大域ログ作成アクションは、無効にしたり有効にしたりできます。syslog アクションの程度を設定するには、重要度を syslog=level のように割り当てます。level に設定できる値は次のとおりです。

  • debug

  • info

  • notice

  • warning

  • err

  • crit

  • alert

  • emerg

デフォルトでは、リソース制御の違反は大域ログ作成では記録されません。

ローカルアクションは、制御値を超えようとしているプロセスに対して実行されます。リソース制御に設定された各しきい値に対して、1 つ以上のアクションを対応付けることができます。局所アクションには、3 つの種類があります。 nonedeny、および signal= です。これら 3 つのアクションは、次のように使用されます。

none

しきい値を超える量のリソース要求に対して、何のアクションも行いません。このアクションは、アプリケーションの進行に影響を与えることなく、リソースの使用状況を監視するのに役立ちます。また、リソース制御を超えたにもかかわらず、同時に、しきい値を超えたプロセスが影響を受けていないときに表示されるグローバルメッセージを有効にすることもできます。

deny

しきい値を超える量のリソース要求を拒否できます。たとえば、task.max-lwps リソース制御に拒否アクションが指定されている場合、新しいプロセスが制御値を超えると fork() システムコールは失敗します。fork(2) を参照してください。

signal=

リソース制御値を超えたときに大域シグナルメッセージを送信するアクションを有効にすることができます。プロセスがしきい値を超えると、プロセスにシグナルが送信されます。プロセスがさらにリソースを消費しても、追加のシグナルが送信されることはありません。使用可能なシグナルを次に一覧表示します。

すべてのリソース制御にすべてのアクションを適用できるわけではありません。たとえば、プロセスは、その所属先のプロジェクトに割り当てられている CPU 配分を超えることはできません。したがって、project.cpu-shares リソース制御に deny アクションを適用することはできません。

実装上の制限により、しきい値に設定できるアクションは、各制御の大域プロパティーによって制限されます。(rctladm(1M) を参照。)使用可能なシグナルアクションの一覧を次のリストに示します。シグナルについての詳細は、signal(3HEAD) を参照してください。

リソース制御値に使用可能なシグナルを次に示します:

SIGABRT

プロセスを終了します。

SIGHUP

ハングアップシグナルを送信します。開いた回線上でキャリアが検出されなくなったときに発生します。シグナルは、端末を制御しているプロセスグループに送信されます。

SIGTERM

プロセスを終了します。ソフトウェアによって送信される終了シグナルです。

SIGKILL

プロセスを終了し、プログラムを強制終了します。

SIGSTOP

プロセスを停止します。ジョブ制御シグナル。

SIGXRES

リソース制御の制限超過です。リソース制御機能によって生成されます。

SIGXFSZ

プロセスを終了します。ファイルサイズの制限超過です。RCTL_GLOBAL_FILE_SIZE プロパティー (process.max-file-size) を持つリソース制御でのみ使用できます。rctlblk_set_value(3C) を参照してください。

SIGXCPU

プロセスを終了します。CPU 時間の制限超過です。RCTL_GLOBAL_CPUTIME プロパティー (process.max-cpu-time) を持つリソース制御でのみ使用できます。rctlblk_set_value(3C) を参照してください。

リソース制御のフラグとプロパティー

システム上のリソース制御には、それぞれ特定のプロパティーセットが対応付けられています。このプロパティーセットは、一連のフラグとして定義されます。これらのフラグは、そのリソースが制御されているすべてのインスタンスに対応付けられます。大域フラグは変更できませんが、rctladm(1M) または setrctl(2) システムコールを使用するとフラグを取得できます。

ローカルフラグは、特定のプロセスまたはプロセス集合に対するリソース制御の特定のしきい値について、デフォルトの動作と構成を定義します。あるしきい値のローカルフラグが、同じリソース制御で定義されている別のしきい値の動作に影響することはありません。ただし、大域フラグは、特定の制御に対応付けられているすべての値の動作に影響します。ローカルフラグは、prctl コマンドまたは setrctl システムコールを使用すると、対応する各大域フラグで指定された制約内で変更できます。setrctl(2) を参照してください。

ローカルフラグ、大域フラグ、およびそれらの定義の詳細な一覧については、rctlblk_set_value(3C) を参照してください。

特定のリソース制御がしきい値に達したときのシステムの動作を確認するには、rctladm を使ってそのリソース制御の大域フラグを表示します。たとえば、process.max-cpu-time の値を表示するには、次を入力します:

$ rctladm process.max-cpu-time
process.max-cpu-time  syslog=off [ lowerable no-deny cpu-time inf seconds ]

大域フラグは次を示します:

lowerable

この制御の特権値を下げるのに、スーパーユーザー特権を必要としません。

no-deny

しきい値を超えても、リソースへのアクセスは拒否されません。

cpu-time

このリソースのしきい値に達したら、SIGXCPU を送信できます。

seconds

リソース制御の時間。

リソース制御のローカル値とアクションを表示するには、prctl コマンドを使用します。例:

$ prctl -n process.max-cpu-time $$
    process 353939: -ksh
    NAME    PRIVILEGE    VALUE    FLAG   ACTION              RECIPIENT
 process.max-cpu-time
         privileged   18.4Es    inf   signal=XCPU                 -
         system       18.4Es    inf   none

両方のしきい値に対して max (RCTL_LOCAL_MAXIMAL) フラグが設定され、このリソース制御に対して inf (RCTL_GLOBAL_INFINITE) フラグが定義されています。inf の値は無限大です。この値は制限を与えません。したがって、構成されているように、両方のしきい値は無限大値を意味し、これらの値を上回ることはありません。

リソース制御の適用

1 つのリソースには、複数のリソース制御を設定できます。リソース制御は、プロセスモデルの包含レベルごとに 1 つずつ設定できます。同じリソース上の異なるコンテナレベルでリソース制御がアクティブな場合、まず、もっとも小さいコンテナの制御が実行されます。このため、両方の制御が同時に検出された場合は、task.max-cpu-time の前に process.max-cpu-time に対するアクションが実行されます。

属性

次の属性については、attributes(5) を参照してください。

属性タイプ
属性値
インタフェースの安定性
確実

関連項目

prctl(1), pooladm(1M), poolcfg(1M), projadd(1M), projmod(1M), rctladm(1M), setrctl(2), rctlblk_set_value(3C), libpool(3LIB), project(4), attributes(5), FSS(7), lofi(7D), memcntl(2)

Oracle Solaris 11.3 でのリソースの管理