この章では、資源制御機能を管理する方法について説明します。
資源制御機能の概要については、第 6 章資源制御 (概要)を参照してください。
タスク |
説明 |
説明 |
---|---|---|
資源制御を設定します。 |
/etc/project ファイルでプロジェクトに資源制御を設定します。 | |
アクティブなプロセス、タスク、またはプロジェクトについて、資源制御値をローカルに取得または変更します。 |
システム上のアクティブなプロセス、タスク、またはプロジェクトに関連付けられている資源制御に対し、実行時に問い合わせや変更を行います。 | |
稼働中のシステムの資源制御の大域的状態を表示または更新します。 |
システム全体の各資源制御の大域ログ状態を表示します。また、制御値を超えたときに syslog で記録するログのレベルを設定します。 | |
アクティブなプロセス間通信 (IPC) 機能の状態を報告します。 |
アクティブなプロセス間通信 (IPC) 機能について情報を表示します。どの IPC オブジェクトがプロジェクトの使用状況に影響を与えているかを監視します。 | |
Web サーバーに十分な CPU 容量が割り当てられているかどうかを判定します。 |
資源制御に大域アクションを設定します。このアクションを設定すると、資源制御値を超えたエンティティーについて通知を受け取ることができ、資源制御値が低すぎるかどうかを判定できます。 |
この手順では、x-files というプロジェクトを /etc/project ファイルに追加し、このプロジェクト内に作成されるタスクに適用する LWP の最大数を設定します。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』の「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。
projadd コマンドに -K オプションを付けて実行して、x-files というプロジェクトを作成します。このプロジェクト内に作成される各タスクの LWP の最大数を 3 に設定します。
# projadd -K 'task.max-lwps=(privileged,3,deny)' x-files |
/etc/project ファイル内のエントリを表示します。それには、次のいずれかの方法を使用します。
次のように入力します。
# projects -l system projid : 0 comment: "" users : (none) groups : (none) attribs: . . . x-files projid : 100 comment: "" users : (none) groups : (none) attribs: task.max-lwps=(privileged,3,deny) |
次のように入力します。
# cat /etc/project system:0:System::: . . . x-files:100::::task.max-lwps=(privileged,3,deny) |
上記の手順を実行したあと、プロジェクト x-files に newtask を使って参加することで新しいタスクを作成したスーパーユーザーは、そのタスクの実行中、LWP を 3 つまでしか作成できません。次の注釈付きのセッション例を参照してください。
# newtask -p x-files csh # prctl -n task.max-lwps $$ process: 111107: csh NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT task.max-lwps privileged 3 - deny - system 2.15G max deny - # id -p uid=0(root) gid=1(other) projid=100(x-files) # ps -o project,taskid -p $$ PROJECT TASKID x-files 73 # csh /* creates second LWP */ # csh /* creates third LWP */ # csh /* cannot create more LWPs */ Vfork failed # |
/etc/project ファイルには、各プロジェクトごとに複数の資源制御設定を記述でき、さらに各資源制御ごとに複数のしきい値を記述できます。しきい値はアクション文節で定義されます。複数の値はコンマで区切られます。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』の「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。
projmod コマンドに -s オプションと -K オプションを付けて実行することで、プロジェクト x-files に資源制御を設定します。
# projmod -s -K 'task.max-lwps=(basic,10,none),(privileged,500,deny); process.max-file-descriptor=(basic,128,deny)' x-filesone line in file |
次の制御が設定されます。
タスクごとの LWP 最大数について、アクションなしの basic 制御。
タスクごとの LWP 最大数について、特権レベルの deny 制御。この制御により、「プロジェクト内の各タスクの最大 LWP 数を設定する方法」の例のように、最大数を超える数の LWP を作成しようとすると失敗します。
プロセスごとの最大ファイル記述子は basic レベルに制限されており、最大値を超える open コールはすべて失敗します。
次のいずれかの方法で、ファイル内のエントリを表示します。
次のように入力します。
# projects -l . . . x-files projid : 100 comment: "" users : (none) groups : (none) attribs: process.max-file-descriptor=(basic,128,deny) task.max-lwps=(basic,10,none),(privileged,500,deny) one line in file |
次のように入力します。
# cat etc/project . . . x-files:100::::process.max-file-descriptor=(basic,128,deny); task.max-lwps=(basic,10,none),(privileged,500,deny) one line in file |
prctl コマンドを使用すると、システム上のアクティブなプロセス、タスク、またはプロジェクトに関連付けられている資源制御に対し、実行時に問い合わせや変更を行うことができます。詳細は、prctl(1) のマニュアルページを参照してください。
この手順は、資源制御の設定や変更がまったく行われていないシステム上で実行する必要があります。/etc/system ファイルまたは project データベース内には、デフォルト以外のエントリしか記述できません。
実行中の現在のシェルなど、任意のプロセスに対して prctl コマンドを実行します。
# prctl $$ process: 100337: -sh NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT process.max-port-events privileged 65.5K - deny - system 2.15G max deny - process.crypto-buffer-limit system 16.0EB max deny - process.max-crypto-sessions system 18.4E max deny - process.add-crypto-sessions privileged 100 - deny - system 18.4E max deny - process.min-crypto-sessions privileged 20 - deny - system 18.4E max deny - process.max-msg-messages privileged 8.19K - deny - system 4.29G max deny - process.max-msg-qbytes privileged 64.0KB - deny - system 16.0EB max deny - process.max-sem-ops privileged 512 - deny - system 2.15G max deny - process.max-sem-nsems privileged 512 - deny - system 32.8K max deny - process.max-address-space privileged 16.0EB max deny - system 16.0EB max deny - process.max-file-descriptor basic 256 - deny 100337 privileged 65.5K - deny - system 2.15G max deny - process.max-core-size privileged 8.00EB max deny - system 8.00EB max deny - process.max-stack-size basic 8.00MB - deny 100337 privileged 8.00EB - deny - system 8.00EB max deny - process.max-data-size privileged 16.0EB max deny - system 16.0EB max deny - process.max-file-size privileged 8.00EB max deny,signal=XFSZ - system 8.00EB max deny - process.max-cpu-time privileged 18.4Es inf signal=XCPU - system 18.4Es inf none - task.max-cpu-time system 18.4Es inf none - task.max-lwps system 2.15G max deny - project.max-contracts privileged 10.0K - deny - system 2.15G max deny - project.max-device-locked-memory privileged 499MB - deny - system 16.0EB max deny - project.max-port-ids privileged 8.19K - deny - system 65.5K max deny - project.max-shm-memory privileged 1.95GB - deny - system 16.0EB max deny - project.max-shm-ids privileged 128 - deny - system 16.8M max deny - project.max-msg-ids privileged 128 - deny - system 16.8M max deny - project.max-sem-ids privileged 128 - deny - system 16.8M max deny - project.max-tasks system 2.15G max deny - project.max-lwps system 2.15G max deny - project.cpu-shares privileged 1 - none - system 65.5K max none - zone.max-lwps system 2.15G max deny - zone.cpu-shares privileged 1 - none - system 65.5K max none - |
実行中の現在のシェルの最大ファイル記述子を表示します。
# prctl -n process.max-file-descriptor $$ process: 110453: -sh NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT process.max-file-descriptor basic 256 - deny 110453 privileged 65.5K - deny - system 2.15G max deny |
次の手順では、prctl コマンドを使用して x-files プロジェクトに新しい特権値を一時的に追加し、プロジェクトあたり 4 つ以上の LWP を使用することを拒否します。その結果は、「プロジェクト内の各タスクの最大 LWP 数を設定する方法」の結果と同等になります。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』の「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。
newtask を使って x-files プロジェクトに参加します。
# newtask -p x-files |
id コマンドに -p オプションを付けて実行し、正しいプロジェクトに参加できたことを確認します。
# id -p uid=0(root) gid=1(other) projid=101(x-files) |
project.max-lwps に新しい特権値を追加して、LWP の数を 3 つまでに制限します。
# prctl -n project.max-lwps -t privileged -v 3 -e deny -i project x-files |
結果を確認します。
# prctl -n project.max-lwps -i project x-files process: 111108: csh NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT project.max-lwps privileged 3 - deny - system 2.15G max deny - |
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』の「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。
prctl コマンドに -r オプションを付けて実行し、process.max-file-descriptor 資源制御の最小値を変更します。
# prctl -n process.max-file-descriptor -r -v 128 $$ |
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』の「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。
プロジェクト group.staff の project.cpu-shares の値を表示します。
# prctl -n project.cpu-shares -i project group.staff project: 2: group.staff NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT project.cpu-shares privileged 1 - none - system 65.5K max none |
project.cpu-shares の現在の値 1 を値 10 で置換します。
# prctl -n project.cpu-shares -v 10 -r -i project group.staff |
プロジェクト group.staff の project.cpu-shares の値を表示します。
# prctl -n project.cpu-shares -i project group.staff project: 2: group.staff NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT project.cpu-shares privileged 10 - none - system 65.5K max none |
rctladm コマンドを使用すると、資源制御機能の大域的状態を実行時に問い合わせたり変更したりできます。詳細は、rctladm(1M) のマニュアルページを参照してください。
たとえば、rctladm に -e オプションを付けて実行して、資源制御の大域属性 syslog を有効にすることができます。制御が限界を超えたとき、指定された syslog レベルで通知が記録されます。process.max-file-descriptor の大域属性 syslog を有効にするには、次のように入力します。
# rctladm -e syslog process.max-file-descriptor |
rctladm コマンドを引数なしで使用すると、各資源制御の大域フラグが大域タイプフラグも含めて表示されます。
# rctladm process.max-port-events syslog=off [ deny count ] process.max-msg-messages syslog=off [ deny count ] process.max-msg-qbytes syslog=off [ deny bytes ] process.max-sem-ops syslog=off [ deny count ] process.max-sem-nsems syslog=off [ deny count ] process.max-address-space syslog=off [ lowerable deny no-signal bytes ] process.max-file-descriptor syslog=off [ lowerable deny count ] process.max-core-size syslog=off [ lowerable deny no-signal bytes ] process.max-stack-size syslog=off [ lowerable deny no-signal bytes ] . . . |
ipcs ユーティリティーを使用すると、アクティブなプロセス間通信 (IPC) 機能について情報を表示できます。詳細は、ipcs(1) のマニュアルページを参照してください。
ipcs に -J オプションを付けて実行すると、どのプロジェクトの制限に対して IPC オブジェクトが割り当てられているかを確認できます。
# ipcs -J IPC status from <running system> as of Wed Mar 26 18:53:15 PDT 2003 T ID KEY MODE OWNER GROUP PROJECT Message Queues: Shared Memory: m 3600 0 --rw-rw-rw- uname staff x-files m 201 0 --rw-rw-rw- uname staff x-files m 1802 0 --rw-rw-rw- uname staff x-files m 503 0 --rw-rw-rw- uname staff x-files m 304 0 --rw-rw-rw- uname staff x-files m 605 0 --rw-rw-rw- uname staff x-files m 6 0 --rw-rw-rw- uname staff x-files m 107 0 --rw-rw-rw- uname staff x-files Semaphores: s 0 0 --rw-rw-rw- uname staff x-files |
資源制御に対して大域アクションを設定すると、資源制御値を超えたエンティティーに関する通知を受け取ることができ、資源制御値が低すぎるかどうかを判断できます。
たとえば、一般的な作業負荷のための十分な CPU 資源が Web サーバーに割り当てられているかどうかを確認する場合を考えます。この容量は、sar データで CPU のアイドル時間と平均負荷率を解析すれば判定できます。また、拡張アカウンティングデータを調べて、Web サーバープロセスで同時に実行しているプロセス数を確認することもできます。
より簡単な方法は、Web サーバーをタスクに配置することです。その上で、syslog を使って大域アクションを設定すると、タスクがマシンの性能に適した LWP の計画数を上回ったときに、警告が通知されます。
詳細は、sar(1) のマニュアルページを参照してください。
prctl コマンドを使用して、httpd プロセスを含むタスクにスーパーユーザーが所有する特権レベルの資源制御を設定します。各タスクの LWP の総数を 40 に制限し、すべての局所アクションを無効にします。
# prctl -n task.max-lwps -v 40 -t privileged -d all `pgrep httpd` |
資源制御 task.max-lwps で、システムログの大域アクションを有効にします。
# rctladm -e syslog task.max-lwps |
作業負荷が資源制御を超えるかどうかを監視します。
作業負荷が資源制御を超えると、次のような内容が /var/adm/messages に記録されます。
Jan 8 10:15:15 testmachine unix: [ID 859581 kern.notice] NOTICE: privileged rctl task.max-lwps exceeded by task 19 |