リソース制御機能は、project データベースを使用して構成されます。プロジェクトとタスクについてを参照してください。リソース制御とその他の属性は、project データベースエントリの最後のフィールドで設定します。各リソース制御に対応付けられる値は、括弧で囲まれ、コンマ区切りのプレーンテキストとして示されます。括弧内の値によって「アクション文節」が構成されます。各アクション文節には、特権レベル、しきい値、および特定のしきい値に関連付けられたアクションが含まれます。各リソース制御は複数のアクション文節を持つことができ、各アクション文節もコンマで区切られます。次のエントリは、プロジェクトエンティティーにおけるタスクごとの軽量プロセス (LWP) 制限と、プロセスごとの最長 CPU 時間制限を定義します。process.max-cpu-time は、プロセスの実行時間が合計で 1 時間になるとプロセスに SIGTERM を送信し、1 時間 1 分になると SIGKILL を送信します。表 3を参照してください。
development:101:Developers:::task.max-lwps=(privileged,10,deny);
process.max-cpu-time=(basic,3600,signal=TERM),(priv,3660,signal=KILL)
1 行で入力します
rctladm コマンドを使用すると、リソース制御機能の実行時に問い合わせや制御機能の変更を「大域有効範囲」で行うことができます。prctl コマンドを使用すると、実行時にリソース制御機能の問い合わせや変更を「局所有効範囲」で行うことができます。
詳細については、リソース制御値に対応付けられた大域アクションと局所アクション、および rctladm(1M) と prctl(1) を参照してください。
次の表に、このリリースで使用できる標準のリソース制御を示します。
この表では、各制御によって制約されるリソースについて説明し、project データベースにおけるそのリソースのデフォルトの単位を示します。デフォルトの単位には次の 2 種類があります。
数量は制限される量を意味します。
インデックスは最大有効識別子を意味します。
したがって、project.cpu-shares は、プロジェクトで使用することが許可されている配分を示します。一方、process.max-file-descriptor は、open(2) システムコールによってプロセスに割り当てることができる最大ファイル番号を指定します。
|
リソース制御の設定や変更がまったく行われていないシステム上では、リソース制御のデフォルト値を表示できます。そのようなシステムでは、/etc/system や project データベースにデフォルト以外のエントリが含まれていません。値を表示するには、prctl コマンドを使用します。
ゾーン規模のリソース制御は、ゾーン内のすべてのプロセスエンティティーによる総リソース消費を制限します。Oracle Solaris ゾーン構成リソース の 構成可能なリソースとプロパティーで説明されているとおり、ゾーン規模のリソース制御は、グローバルプロパティー名を使用して設定することもできます。
|
ゾーン規模のリソース制御の構成については、リソース制御と属性の構成およびOracle Solaris ゾーン構成リソース の ゾーン規模のリソース制御の設定を参照してください。
ゾーン規模のリソース制御を大域ゾーンに適用することも可能です。
リソース制御の種類を示す大域フラグは、すべてのリソース制御に対して定義されます。これらのフラグは、種類に関する基本情報を prctl などのアプリケーションに伝えるために、システムによって使用されます。アプリケーションはこの情報を使用して、次の内容を判定します。
各リソース制御に適した単位の文字列
倍率値を解釈するときに使用する正しい倍率
次の大域フラグを使用できます。
|
リソース制御に倍率値を使用できます。次の例は、倍率付きのしきい値を示します。
task.max-lwps=(priv,1K,deny)
リソース制御のしきい値は、局所アクションのトリガーやロギングなどの大域アクションの発生が可能である実行ポイントを設定します。
リソース制御の各しきい値は、特権レベルに関連付ける必要があります。次の 3 種類の特権レベルのいずれかを使用します。
基本値 — 呼び出し元プロセスの所有者が変更できます
特権値 — 特権を持っている呼び出し元 (root) だけが変更できます
システム値 — オペレーティングシステムによる処理が実行されている間は、固定されます
リソース制御は、システムまたはリソースの提供者によって定義されるシステム値を 1 つ持つことが保証されます。システム値は、オペレーティングシステムが提供できるリソースの量を意味します。
特権値はいくつでも定義できます。基本値は 1 つだけ許可されます。特権値を指定しないで実行される操作には、デフォルトで、基本レベルの特権が割り当てられます。
リソース制御値の特権レベルは、リソース制御ブロックの特権フィールドで、RCTL_BASIC、RCTL_PRIVILEGED、または RCTL_SYSTEM のように定義します。詳細は、setrctl(2)を参照してください。prctl コマンドを使用すると、基本レベルおよび特権レベルに対応付けられている値を変更できます。
リソース制御値に対応付けられるアクションには 、2 種類あります。 大域アクションと局所アクションです。
大域アクションは、システム上のすべてのリソース制御のリソース制御値に適用されます。rctladm コマンド (rctladm(1M) のマニュアルページに記載) を使用すると、次のアクションを実行できます。
アクティブなシステムリソース制御の大域的状態を表示します
大域ログ作成アクションを設定します
リソース制御に対応付けられた大域ログ作成アクションは、無効にしたり有効にしたりできます。syslog アクションの程度を設定するには、重要度を syslog=level のように割り当てます。level に設定できる値は次のとおりです。
debug
info
notice
warning
err
crit
alert
emerg
デフォルトでは、リソース制御の違反は大域ログ作成では記録されません。レベル n/a は、大域アクションを構成できないリソース制御を示します。
局所アクションは、制御値を超えようとしているプロセスに対して実行されます。リソース制御に設定された各しきい値に対して、1 つ以上のアクションを対応付けることができます。局所アクションには、3 つの種類があります。 none、deny、および signal= です。これら 3 つのアクションは、次のように使用されます。
しきい値を超える量のリソース要求に対して、何のアクションも行いません。このアクションは、アプリケーションの進行に影響を与えることなく、リソースの使用状況をモニターするのに役立ちます。プロセスがリソース制御のしきい値を超えたときに大域メッセージを表示することもできます。ただし、このアクションによってプロセスが影響を受けることはありません。
しきい値を超える量のリソース要求を拒否できます。たとえば、task.max-lwps リソース制御に deny アクションが指定されている場合、制御値を超えるような新しいプロセスを作成する fork システムコールは失敗します。fork(2) のマニュアルページを参照してください。
リソース制御値を超えたときに大域シグナルメッセージを送信するアクションを有効にすることができます。プロセスがしきい値を超えると、プロセスにシグナルが送信されます。プロセスがさらにリソースを消費しても、追加のシグナルが送信されることはありません。使用可能なシグナルは表 3にリストされています。
すべてのリソース制御にすべてのアクションを適用できるわけではありません。たとえば、プロセスは、その所属先のプロジェクトに割り当てられている CPU 配分を超えることはできません。したがって、project.cpu-shares リソース制御に deny アクションを適用することはできません。
実装上の制限により、しきい値に設定できるアクションは、各制御の大域プロパティーによって制限されます。rctladm(1M) のマニュアルページを参照してください。次の表に、使用できるシグナルアクションを示します。シグナルの詳細については、signal(3HEAD) のマニュアルページを参照してください。
|
システム上のリソース制御には、それぞれ特定のプロパティーセットが対応付けられています。このプロパティーセットは、一連のフラグとして定義されます。これらのフラグは、そのリソースが制御されているすべてのインスタンスに対応付けられます。大域フラグは変更できませんが、rctladm または getrctl システムコールを使って取得できます。
ローカルフラグは、特定のプロセスまたはプロセス集合に対するリソース制御の特定のしきい値について、デフォルトの動作と構成を定義します。あるしきい値のローカルフラグが、同じリソース制御で定義されている別のしきい値の動作に影響することはありません。ただし、大域フラグは、特定の制御に対応付けられているすべての値の動作に影響します。ローカルフラグは、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 ]
大域フラグは、次のことを示します。
この制御の特権値を下げるのに、スーパーユーザー特権を必要としません。
しきい値を超えても、リソースへのアクセスは拒否されません。
リソースがしきい値に達したとき、SIGXCPU を送信できます。
リソース制御の時間。
特権タイプ basic を持つリソース制御値を設定できません。特権付きリソース制御値だけが許可されます。
リソース制御値に対してローカルのシグナルアクションを設定できません。
このリソース制御に対して大域の syslog メッセージアクションを設定できません。
しきい値を超えたときに、必ずリソースの要求を拒否します。
リソース制御のカウント (整数) 値。
リソース制御のサイズの単位。
リソース制御のローカル値とアクションを表示するには、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
この例では、2 つのしきい値の両方に max (RCTL_LOCAL_MAXIMAL) フラグが設定されており、リソース制御には inf (RCTL_GLOBAL_INFINITE) フラグが設定されています。inf の値は無限大です。この値は制限を与えません。したがって、構成されているように、両方のしきい値は無限大値を意味し、これらの値を上回ることはありません。
1 つのリソースには、複数のリソース制御を設定できます。リソース制御は、プロセスモデルの包含レベルごとに 1 つずつ設定できます。同じリソース上の異なるコンテナレベルでリソース制御がアクティブな場合、まず、もっとも小さいコンテナの制御が実行されます。このため、両方の制御が同時に検出された場合は、task.max-cpu-time の前に process.max-cpu-time に対するアクションが実行されます。
図 3 プロセス集合、コンテナの包含関係、およびそのリソース制御セット
プロセスのリソース消費が不明な場合がよくあります。リソース消費に関する詳細な情報を入手するには、rctladm コマンドで利用できる大域リソース制御アクションを使用してみてください。rctladm を使用して、リソース制御に syslog アクションを設定します。そのリソース制御が管理するエンティティーでしきい値が検出されると、構成したログレベルでシステムメッセージが記録されます。詳細は、リソース制御の管理のタスクおよび rctladm(1M) のマニュアルページを参照してください。