Oracle Solaris のシステム管理 (Oracle Solaris コンテナ : 資源管理と Oracle Solaris ゾーン)

第 10 章 資源上限デーモンによる物理メモリーの制御 (概要)

資源上限デーモン rcapd を使用すると、資源上限が定義されたプロジェクト内で動作するプロセスが消費する物理メモリーを規制できます。

Solaris 10 8/07: システムでゾーンを実行している場合は、大域ゾーンから rcapd を使用して、非大域ゾーンでの物理メモリーの消費を規制できます。詳細は、第 18 章非大域ゾーンの計画と構成 (手順)を参照してください。

この章の内容は次のとおりです。

rcapd 機能の使用手順については、第 11 章資源上限デーモンの管理 (手順)を参照してください。

資源上限デーモンによる物理メモリー制御の新機能

Solaris 10: projmod コマンドを使用して、/etc/project ファイル内の rcap.max-rss 属性を設定できるようになりました。

Solaris 10 11/06: Solaris サービス管理機能 (SMF) のサービスとして資源上限デーモンを有効化/無効化することに関する情報が、追加されました。

Solaris 10 の新機能の全一覧および Solaris リリースについての説明は、『Oracle Solaris 10 9/10 の新機能』を参照してください。

資源上限デーモンの紹介

資源「上限」とは、物理メモリーなどの資源消費量の上限のことです。物理メモリーの上限はプロジェクトごとに設定します。

資源上限デーモンとその関連ユーティリティーは、物理メモリーの資源上限を制限および管理する機構を提供します。

資源制御と同様に、資源上限を定義するには、project データベース内にあるプロジェクトエントリの属性を使用します。資源制御はカーネルによって同期的に実行されますが、物理メモリーの資源上限の制限は資源上限デーモンによってユーザーレベルで非同期的に実行されます。この資源上限の制限は非同期的に実行されるため、資源上限デーモンがサンプリングを行う間隔の分だけ、短時間の遅延が発生します。

rcapd については、rcapd(1M) のマニュアルページを参照してください。プロジェクトと project データベースについては、第 2 章プロジェクトとタスク (概要) および project(4) のマニュアルページを参照してください。資源制御については、第 6 章資源制御 (概要)を参照してください。

資源上限制御のしくみ

資源上限デーモンは、物理メモリー上限が定義されたプロジェクトの資源使用率を定期的にサンプリングします。このサンプリング間隔は管理者が指定できます。詳細は、「サンプリング間隔の決定」を参照してください。システムの物理メモリー使用率が上限実行しきい値を超え、ほかの条件にも適合する場合、資源上限デーモンは、物理メモリー上限が定義されたプロジェクトの資源消費をその上限以下に減らします。

仮想メモリーシステムは物理メモリーを複数の「ページ」に分割します。「ページ」は、Solaris メモリー管理サブシステムにおける物理メモリーの基礎となる単位です。データをファイルからメモリーに読み取るとき、仮想メモリーシステムは 1 度に 1 ページずつ読み取ります。この動作のことを、ファイルの「ページイン」と呼びます。資源消費を減らすとき、資源上限デーモンは、あまり使用されていないページをスワップデバイス (物理メモリーの外にある領域) に再配置します。この動作のことを「ページアウト」と呼びます。

物理メモリーを管理するために、資源上限デーモンは、プロジェクトの作業負荷の常駐セットのサイズを、作業セットのサイズに対して調節します。常駐セットとは、物理メモリーに常駐するページのことです。作業セットとは、作業負荷がその処理サイクル中にアクティブに使用するページのことです。作業セットは、プロセスが動作するモードや処理するデータの種類に応じて、そのときどきで変化します。すべての作業負荷がその作業セットの常駐に十分な物理メモリーにアクセスできるのが理想です。しかし、作業セットは、物理メモリーのほか、二次ディスク記憶装置にも格納することが可能です。

rcapd は 1 度に 1 つのインスタンスしか実行できません。

プロジェクトの物理メモリーの使用率を制限する属性

物理メモリー資源の上限をプロジェクトに対して定義するには、project データベースエントリにこの属性を追加して、常駐セットサイズ (RSS) の上限を設定します。

rcap.max-rss

プロジェクト内のプロセスが利用できる物理メモリーの合計 (バイト数)。

たとえば、/etc/project ファイル内の次の行は、10G バイトの RSS 上限を db というプロジェクトに対して設定します。


db:100::db,root::rcap.max-rss=10737418240

注 –

指定した上限値はシステムによってページのサイズに丸められることがあります。


projmod コマンドを使用すると、/etc/project ファイル内の rcap.max-rss 属性を設定できます。


# projmod -s -K rcap.max-rss=10GB db

/etc/project ファイルには、次の行が含まれるようになります。


db:100::db,root::rcap.max-rss=10737418240

rcapd の構成

資源上限デーモンを構成するには、rcapadm コマンドを使用します。次のような作業が可能です。

資源上限デーモンを構成するには、スーパーユーザーの特権を持っているか、プロファイルの一覧内に Process Management プロファイルが含まれている必要があります。Process Management 役割と System Administrator 役割には、どちらにも Process Management プロファイルが含まれています。

構成の変更を rcapd に適用するには、構成間隔に従うか (rcapd の動作間隔」を参照)、または必要に応じて SIGHUP を送信します (kill(1) のマニュアルページを参照)。

引数なしで使用した場合、rcapadm は資源上限デーモンの現在の状態を表示します (構成されている場合のみ)。

次の項では、上限の制限、上限値、および rcapd の動作間隔について説明します。

ゾーン環境がインストールされているシステムでの資源上限デーモンの使用

ゾーンを構成するときに capped-memory 資源を設定することにより、ゾーンの常駐セットサイズ (RSS) 使用量を制御できます。詳細は、「Solaris 10 8/07: 物理メモリーの制御と capped-memory 資源」を参照してください。大域ゾーンも含め、ゾーン内で rcapd を実行すると、そのゾーン内のプロジェクトにメモリー上限を適用できます。

特定のゾーンで消費可能なメモリー量に、次の再起動まで一時的な上限を設定することができます。「ゾーンに一時的な資源上限を指定する方法」を参照してください。

rcapd をゾーン内で使用して、資源上限が定義されたプロジェクト内で動作するプロセスが消費する物理メモリーを規制する場合は、そのゾーン内でデーモンを構成する必要があります。

別のゾーン内にあるアプリケーションのメモリー上限を選択する場合、通常は、そのアプリケーションが別のゾーン内にあることを考慮する必要はありません。例外は、ゾーン別のサービスの場合です。ゾーン別のサービスは、メモリーを消費します。システムの物理メモリー量およびメモリー上限を決定する際には、このメモリー消費を考慮してください。


注 –

rcapdlx ブランドゾーンで実行することはできません。ただし、デーモンを大域ゾーンから使用してブランドゾーンのメモリー上限を設定することはできます。


メモリー上限実行しきい値

メモリー上限実行しきい値」とは、上限制限を引き起こす、システム上の物理メモリーの使用率 (パーセンテージ) のことです。システムの物理メモリー使用率がこのしきい値を超えたとき、メモリー上限が制限されます。この使用率には、アプリケーションやカーネルが使用する物理メモリーも含まれます。この使用率は、メモリー上限が制限される方法を決定します。

上限が制限されると、プロジェクトの作業負荷からメモリーがページアウトされることがあります。

作業負荷は、定義された上限までの物理メモリーを使用することが許可されます。システムのメモリー使用率がメモリー上限実行しきい値を下回っている場合、作業負荷は上限より多くのメモリーを使用できます。

上限実行しきい値を設定する方法については、「メモリー上限実行しきい値を設定する方法」を参照してください。

上限値の決定

プロジェクトの上限の設定が低すぎると、通常の状態でも、作業負荷が効率的に機能するだけのメモリーを使用できない可能性があります。作業負荷がより多くのメモリーを要求するためページングが発生し、システムの性能に悪影響がでます。

プロジェクトの上限の設定が高すぎると、上限に達する前に、利用可能な物理メモリーを使い果たす可能性があります。この場合、物理メモリーは、rcapd ではなくカーネルによって効率的に管理されます。

プロジェクトの上限を決定するときには、次の要素を考慮します。

入出力システムへの影響

サンプリングした使用率がプロジェクトの上限を超えている場合、資源上限デーモンはプロジェクトの作業負荷の物理メモリー使用率を減らそうとします。上限が制限されている間は、作業負荷がマッピングしているファイルには、スワップなどのデバイスが使用されます。上限を頻繁に超える作業負荷の場合、その性能は、スワップデバイスの性能に大きく左右されます。このような作業負荷を実行することは、作業負荷の上限と同じサイズの物理メモリーを持つマシン上で作業負荷を実行することと似ています。

CPU 使用率への影響

資源上限デーモンの CPU 使用率は、このデーモンが上限を制限するプロジェクトの作業負荷内のプロセスの数と、作業負荷のアドレス空間のサイズによって変化します。

資源上限デーモンの CPU 時間の一部は、作業負荷の使用率のサンプリングに費やされます。作業負荷にプロセスを追加すると、使用率のサンプリングにかかる時間が増えます。

上限値を超えると上限が制限され、資源上限デーモンの CPU 時間がさらに消費されます。消費される CPU 時間は仮想メモリーの量に比例します。消費される CPU 時間は、作業負荷のアドレス空間の合計サイズの変化によって増減します。この情報は、rcapstat の出力の vm 列に報告されます。詳細は、rcapstat による資源使用率の監視」および rcapstat(1) のマニュアルページを参照してください。

共有メモリーの報告

rcapd デーモンは、ほかのプロセスと共有されているメモリーページ、あるいは、同じプロセス内で複数回マッピングされているメモリーページについて、かなり正確な RSS の見積もりを報告します。異なるプロジェクトのプロセスが同じメモリーを共有している場合、そのメモリーは、そのメモリーを共有しているすべてのプロジェクトの RSS の合計に含められます。

この見積もりは、データベースのように共有メモリーを多用する作業負荷に使用できます。データベースの作業負荷では、次のようにプロジェクトの通常の使用率をサンプリングすることによって、適切な初期上限値を決定することもできます。prstat コマンドに -J または -Z オプションを付けて実行し、その出力を使用します。詳細は、prstat(1M) のマニュアルページを参照してください。

rcapd の動作間隔

rcapd を定期的に実行するように、rcapd の動作間隔を設定できます。

すべての間隔は秒単位で指定します。次の表に、rcapd の動作とそのデフォルトの間隔値を示します。

操作 

デフォルトの間隔値 (秒) 

説明 

scan

15 

プロジェクトの作業負荷内で動作しているプロセスを走査する間隔の秒数。最小値は 1 秒です。 

sample

常駐セットサイズのサンプリングから、その後に上限を制限するまでの間の秒数。最小値は 1 秒です。 

report

5  

ページング統計を更新する間隔の秒数。0 に設定すると、ページング統計は更新されず、rcapstat からの出力も最新の状態を示さなくなります。

config

60 

再構成する間隔の秒数。再構成イベントでは、rcapadm は構成ファイルを更新用に読み取って、project データベースに新しいまたは改訂されたプロジェクト上限があるかどうかを走査します。SIGHUPrcapd に送信すると、再構成が即座に行われます。

間隔を調節する方法については、「動作間隔を設定する方法」を参照してください。

rcapd 走査間隔の決定

走査間隔とは、rcapd が新しいプロセスを探す頻度のことです。多くのプロセスが動作しているシステムでは、一覧の走査に時間がかかるため、走査間隔を長くして、消費される CPU 時間の合計を減らしたほうがよい場合もあります。しかし、走査間隔は、あるプロセスの存在が上限が定義されている作業負荷に属するとみなされるまでに最低限必要な時間も意味します。生存期間が短いプロセスを数多く実行する作業負荷の場合、走査間隔が長いと、rcapd はそれらのプロセスが作業負荷に属さないものとみなす可能性があります。

サンプリング間隔の決定

rcapadm で構成したサンプリング間隔は、作業負荷の使用率をサンプリングして上限を超えていた場合に、rcapd が上限を制限するまでの、最短時間です。サンプリング間隔を短くすると、ほとんどの場合、rcapd が上限を頻繁に制限するため、ページングによる入出力が増えます。しかし、サンプリング間隔を短くすると、特定の作業負荷の物理メモリー使用率が急増した場合に、ほかの作業負荷への影響を抑えることにもなります。サンプリングの合間には、この作業負荷は自由にメモリーを消費でき、上限が定義されているほかの作業負荷のメモリーすらも利用できますが、この合間が狭められることになるのです。

rcapstat に指定したサンプリング間隔が、rcapadmrcapd に指定したサンプリング間隔よりも短い場合、いくつかの間隔に対する出力がゼロになることがあります。この状況が発生するのは、rcapd が統計を更新する間隔が、rcapadm で指定した間隔よりも長いためです。rcapadm で指定した間隔は、rcapstat で使用されるサンプリング間隔から独立しています。

rcapstat による資源使用率の監視

上限が定義されたプロジェクトの資源使用率を監視するには、rcapstat を使用します。rcapstat の報告例については、rcapstat による報告の生成」を参照してください。

報告用のサンプリング間隔、および統計を繰り返す回数を設定できます。

interval

サンプリング間隔を指定します (秒)。デフォルトの間隔は 5 秒です。

count

統計を繰り返す回数を指定します。デフォルトでは、終了シグナルを受信するまで、あるいは、rcapd プロセスが終了するまで、rcapstat は統計を報告し続けます。

rcapstat が最初に発行する報告では、ページング統計はデーモンの起動以降の活動を示します。以後の報告では、前回の報告以降の活動を示します。

次の表に、rcapstat の報告の列見出しを定義します。

rcapstat の列見出し

説明 

id

上限が定義されたプロジェクトの ID。 

project

プロジェクト名。 

nproc

プロジェクト内のプロセス数。 

vm

プロジェクト内のプロセスが使用する仮想メモリーサイズの合計。マップされたファイルおよびデバイスもすべて含みます。単位は、K バイト (K)、M バイト (M)、または G バイト (G) です。 

rss

プロジェクト内のプロセスが使用すると推定される常駐セットサイズ (RSS) の合計。単位は、K バイト (K)、M バイト (M)、または G バイト (G) です。共有されるページは考慮されません。 

cap

プロジェクトに定義された RSS 上限。メモリー上限を指定する方法については、「プロジェクトの物理メモリーの使用率を制限する属性」または rcapd(1M) のマニュアルページを参照してください。

at

前回の rcapstat のサンプリング以降、 rcapd がページアウトしようとしたメモリーの合計。

avgat

前回の rcapstat のサンプリング以降に発生した各サンプリングサイクル中、rcapd がページアウトしようとしたメモリーの平均。rcapd がコレクション RSS をサンプリングする頻度は、rcapadm で設定できます。rcapd の動作間隔」を参照してください。

pg

前回の rcapstat のサンプリング以降、 rcapd が正常にページアウトしたメモリーの合計。

avgpg

前回の rcapstat のサンプリング以降に発生した各サンプリングサイクル中、rcapd が正常にページアウトしたと推定されるメモリーの平均。rcapd がプロセス RSS をサンプリングする頻度は rcapadm で設定できます。rcapd の動作間隔」を参照してください。

rcapd とともに使用されるコマンド

コマンド 

説明 

rcapstat(1)

上限が定義されたプロジェクトの資源使用率を監視します。 

rcapadm(1M)

資源上限デーモンを構成します。構成済みの資源上限デーモンの現在の状態を表示します。資源上限制御を有効または無効にします。 

rcapd(1M)

資源上限デーモン。