Solaris Resource Manager 1.3 のシステム管理

第 8 章 資源キャッピングデーモンによる物理メモリー管理


注 -

この機能を利用できるのは、SPARC 版 Solaris 8 で Solaris Resource Manager 1.3 を使用している場合だけです。


資源キャップは、プロセスコレクションによる資源 (物理メモリーや CPU タイムなど) の消費に設定される上限です。

Solaris Resource Manager 1.3 では、資源キャップを適用することで l ノードまたはプロジェクトにアタッチされたプロセスコレクションによる物理メモリー消費を調整できます。プロジェクトの詳細は、project(4) のマニュアルページを参照してください。

物理メモリー利用を制限する属性

物理メモリー資源キャップは、使用中のモードに応じて l ノードまたはプロジェクトに対して定義できます。この定義は、l ノードまたはプロジェクトに属性を追加することによって行います。

次に、RSS (Resident Set Size) キャップの割り当てに使用される l ノード属性を示します。

rss.limit

rss.limit 属性は、l ノードにアタッチされたプロセスコレクションに適用される物理メモリーキャップを個数で定義します。キャップは、正の数でなければなりません。

rss.limit は、limadm(1MSRM) を使用して設定します。たとえば、l ノード oracle に 10GB の RSS キャップを設定するには、次のように入力します。


# /usr/srm/sbin/limadm set rss.limit=10G oracle

次に、RSS キャップの設定に使用されるプロジェクト属性を示します。

rcap.max-rss

rcap.max-rss 属性は、プロジェクトにアタッチされたプロセスに利用できる物理メモリーの合計量をバイト単位で定義します。キャップは、正の数でなければなりません。

rcap.max-rss は、project(4) データベースで設定します。たとえば、oracle というプロジェクトに RSS キャップを設定するには、プロジェクトデータベース内に次の行を指定します。


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

技術内容

資源キャップ適用デーモン rcapd(1MSRM) とその関連ユーティリティを利用することで、資源キャップの適用と管理が行えます。一度に実行できるのは、1 つの rcapd インスタンスだけです。rcapd(1MSRM) デーモンは、物理メモリーキャップが定義されたプロセスコレクションの資源利用状況を定期的にサンプリングします。プロセスによる消費がキャップ値を超え、かつその他のいくつかの条件が揃った場合、rcapd(1MSRM) デーモンはプロセスの資源消費の合計がキャップで指定された量を下回るように対策を施します。

仮想メモリーシステムは、物理メモリーをページと呼ばれるセグメントに分割します。ファイルからデータを読み取ってメモリーに配置する場合、仮想メモリーシステムは一度に 1 ページを読み取るか、あるいはファイル内の複数ページを読み取ります。rcapd(1MSRM) デーモンは、資源消費を減らすために、使用頻度の少ないページを物理メモリーの外の領域へページアウト (再配置) できます。

資源キャッピングデーモンの構成には、rcapadm(1MSRM) を使用します。rcapadm は、大域的なレベルで資源キャップを管理するためにも使用されます。構成変更は、要求に応じて SIGHUP にその変更を送信するか (kill(1) のマニュアルページを参照)、あるいは構成間隔 (rcapadm(1MSRM) のマニュアルページを参照) を通してrcapd に加えることができます。このデーモンを構成するには、スーパーユーザー権限が必要です。引数を指定せずに使用すると、rcapadm は資源キャッピングデーモンの現在の状態を表示します (設定されている場合)。

定義されている各キャップの資源キャップ適用デーモン統計値を表示するには、rcapstat(1SRM) を使用します。

資源キャッピングデーモンの使用

デーモンの構成には、rcapadm(1MSRM) を使用します。

処理モードの選択

2 つの処理モード、lnodeproject がサポートされています。

l ノードに定義されているキャップを適用し、プロジェクトに定義されているキャップを無視するには、次のように入力します。


# rcapadm -m lnode

プロジェクトに定義されているキャップを適用し、l ノードに定義されているキャップを無視するには、次のように入力します。


# rcapadm -m project

処理間隔の調整

Yrcapd によって実施する定期処理は間隔を調整できます。間隔を設定し直すには、-i オプションを使用してください。


# rcapadm -i interval=value,...,interval=value 

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

Interval 

デフォルト値 (秒) 

説明 

scan

15 

rcapd が新しいプロセスを走査する間隔。最低値は 1 秒。

sample

プロセス RSS (Rresident Set Size) サンプリングの間隔。最小値は 1 秒 

report

5  

rcapd のためにページング統計値が rcapd によって更新される間隔。0 に設定すると、統計値は更新されない

config

60 

再構成の間隔。再構成イベントでは、rcapd は構成ファイルをチェックして更新がないかを調べ、l ノード (制限) データベースまたはプロジェクトデータベースを走査して新しい l ノードキャップまたはプロジェクトキャップ、あるいは新しいコレクションがないかを調べます。

rcapstat に指定された間隔が (rcapadm(1MSRM) を使用して) rcapd に指定された間隔よりも短い場合は、一部の間隔の出力がゼロになる可能性があります。これは、rcapadm で指定された間隔を上回る間隔で rcapd が 統計値を更新することがなく、この間隔は rcapstat によって使用されるサンプリング間隔には関係がなくかつこの間隔よりも精密度が劣るためです。

メモリーキャップ適用値の設定

キャップは、プロセスに利用できる物理的なメモリーが少なくなるまでは適用されることがないように構成できます。最小 (かつデフォルト) の値は 0 であり、この場合メモリーキャップは常に適用されます。メモリーキャップ適用の最小の物理メモリー利用値を変更するには、次のように入力します。


# rcapadm -c percent

パーセント値は、0 から 100 の範囲で指定する必要があります。現在の大域物理メモリー利用量とそのキャップは、-g オプションを指定して rcapstat コマンドを実行することによって確認できます。大域メモリーキャップの報告を参照してください。

資源キャップの有効化

資源キャッピングデーモンを今すぐに起動するとともにシステムがブートされるごとにこのデーモンが起動するように設定するには、次のように入力します。


# rcapadm -E

資源キャッピングデーモンの現在の実行状態に影響を与えることなくブート時にこのデーモンが起動するように設定するには、次のように -n オプションも併せて指定します。


# rcapadm -n -E

資源キャッピングの無効化

資源キャッピングデーモンを今すぐに停止するとともにシステムの起動時にも起動しないようこのデーモンを無効にするには、次のように入力します。


# rcapadm -D

資源キャッピングデーモンの現在の実行状態に影響を与えることなく資源キャッピングデーモンを無効にするには、次のように -n オプションも併せて指定します。


# rcapadm -n -D

注 -

rcapd を中断すると、プロセスが停止状態になる可能性があります。kill(1) のマニュアルページを参照してください。rcapd を正常に終了させるには、rcapadm -D または SIGTERM を使用してください。


資源キャッピングデーモンの監視

rcapd によってキャッピングされた l ノードまたはプロジェクトについてのレポートを発行するには、rcapstat コマンドを使用してください。ユーザーは、サンプリングの間隔とレポートの頻度を設定できます。

interval

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

count

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

rcapstat によって発行される最初のレポート内のページング統計値には、デーモン起動後のアクティビティが示されます。その後のレポートには、最後のレポートが発行されて以来のアクティビティが示されます。

次に、rcapstat レポートの列見出しの内容を示します。

id

プロセスコレクションの l ノード ID、またはプロジェクトにアタッチされているプロセスのプロジェクト ID。

lnode/project

project または lnode

nproc

コレクション内のプロセスの数。

vm

キロバイト (K)、メガバイト (M)、またはギガバイト (G) で示したプロセスコレクションの全仮想メモリーサイズ。これには、マッピングされたすべてのファイルとデバイスが含まれます。

rss

キロバイト (K)、メガバイト (M)、またはギガバイト (G) で示したプロセスコレクションの RSS (Resident Set Size) の合計。共有されているオブジェクトの分は含まれません。

cap

プロジェクトまたは l ノードに設定されている RSS キャップ。メモリーキャップの指定方法については、rcapd(1MSRM) のマニュアルページを参照してください。

at

前回の rcapstat サンプル以降に rcapd がページアウトを試みたメモリーの合計量。

avgat

前回の rcapstat サンプル以降に発生した各サンプルサイクルで rcapd がページアウトを試みたメモリーの平均量。rcapd がコレクション RSS をサンプリングする頻度は、rcapadm(1MSRM) を使用して設定できます。

pg

前回の rcapstat サンプル以降に rcapd が正常にページアウトしたメモリーの合計量。rcapd は、使用頻度がもっとも小さいページをページアウトします。

avgpg

前回の rcapstat サンプル以降に発生した各サンプルサイクルで rcapd が正常にページアウトしたメモリーのおおよその平均量。rcapd がプロセス RSS サイズをサンプリングする頻度は、rcapadm を使用して設定できます。

rcapstat によるレポート生成

この節の例は、物理メモリーキャップが定義されたプロセスコレクションの資源利用状況を監視するために rcapstat を使用する方法を示しています。

rcapstat によるキャップ情報と l ノード情報の生成

2 人のユーザーに関連付けられた 2 つの l ノードに対してキャップが定義されています。user1 には 50MB のキャップ、user2 には 10MB のキャップが指定されています。

次のコマンドは、5 秒のサンプリング間隔でレポートを生成します。レポートは、5 回発行されます (各サンプル後に 1 回ずつ)。


usermachine% rcapstat 5 5
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   35M   50M   50M    0K 3312K    0K
 78194 user2       1 2368K 1856K   10M    0K    0K    0K    0K
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   35M   50M    0K    0K    0K    0K
 78194 user2       1 2368K 1856K   10M    0K    0K    0K    0K
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   35M   50M    0K    0K    0K    0K
 78194 user2       1 2368K 1928K   10M    0K    0K    0K    0K
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   35M   50M    0K    0K    0K    0K
 78194 user2       1 2368K 1928K   10M    0K    0K    0K    0K
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   35M   50M    0K    0K    0K    0K
 78194 user2       1 2368K 1928K   10M    0K    0K    0K    0K

出力の最初の 3 行は最初のレポートに相当し、2 つの l ノードのキャップ情報と l ノード情報、および rcapd 開始後のページング統計値を示しています。at 列と pg 列では、user1 についてはゼロを超える数値、user2 についてはゼロが示されています。これは、このデーモンの履歴のある時点において user1 がそのキャップを超えたが user2 はキャップを超えなかったことを意味します。

後続のレポートには前回の構成間隔以降のページング統計値が示されていますが、重要なアクティビティは示されていません。

l ノードのキャップを小さくする

limadm(1MSRM) コマンドを使用し、l ノードのメモリーキャップを抑えることができます。これにより、キャップがより限定的となり、rcapd は次の構成間隔のあとで新しいキャップを適用します (rcapadm(1MSRM) のマニュアルページを参照)。また、rcapd によって新しいキャップをただちに適用するシグナルも送信できます。


admin# limadm set rss.limit=30M user1
admin# pkill -HUP rcapd

次のコマンドは、5 秒のサンプリング間隔でレポートを生成します。レポートは、5 回発行されます (各サンプル後に 1 回ずつ)。


admin# rcapstat 5 5
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   35M   30M   50M    0K 3312K    0K
 78194 user2       1 2368K 1856K   10M    0K    0K    0K    0K
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   36M   30M   52M   52M  632K  632K
 78194 user2       1 2368K 2096K   10M    0K    0K    0K    0K
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   33M   30M   57M   52M  816K  632K
 78194 user2       1 2368K 1968K   10M    0K    0K    0K    0K
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   27M   30M 4792K 4792K   40K   40K
 78194 user2       1 2368K 1144K   10M    0K    0K    0K    0K
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   27M   30M    0K    0K    0K    0K
 78194 user2       1 2368K 1144K   10M    0K    0K    0K    0K

キャップが 50MB から 30MB に抑えられた時、rcapd はこのキャップ値を超える 6MB の常駐メモリーのページアウトを試みるという方法で対応しています。目標値に達しました (ほんのわずか超えた状態)。

rcapstat によるプロジェクト RSS の監視

次のコマンドは、5 秒のサンプリング間隔でレポートを生成します。レポートは、5 回発行されます (各サンプル後に 1 回ずつ)。


user1machine% rcapstat 5 5

id     project   nproc    vm   rss   cap    at avgat    pg avgpg
376565 user1        57  209M   46M   10M  440M  220M 5528K 2764K
376565 user1        57  209M   44M   10M  394M  131M 4912K 1637K
376565 user1        56  207M   43M   10M  440M  147M 6048K 2016K
376565 user1        56  207M   42M   10M  522M  174M 4368K 1456K
376565 user1        56  207M   44M   10M  482M  161M 3376K 1125K

この例では、プロジェクト user1 にはその物理メモリーキャップを超える RSS が割り当てられています。pg 列に表示されているゼロ以外の値は、プロジェクトのプロセスによる物理メモリーの利用を減らすことによってキャップの条件を維持するように rcapd が一貫してメモリーをページアウトしていることを示します。しかし、これに対応するだけの減少が起きることなく rss 値が変動していることからわかるように、rcapd は成功していません。これは、アプリケーションの常駐メモリーが活発に使用され、rcapd がワーキングセットに作用していることを意味します。この状況では、ワーキングセットサイズが縮小されるか、キャップが拡大されるか、あるいはアプリケーションがそのメモリーアクセスパターンを変更するまで、システムおよび関連する入出力はページ障害を起こしやすい状態となります。

プロジェクトのワーキングセットサイズの決定

次の例は先の例の続きであり、同じプロジェクトを使用しています。


example% rcapstat 5 5
    id project    nproc    vm   rss   cap    at avgat    pg avgpg
376565 user1         56  207M   44M   10M  381M  191M   15M 7924K
376565 user1         56  207M   46M   10M  479M  160M 2696K  898K
376565 user1         56  207M   46M   10M  424M  141M 7280K 2426K
376565 user1         56  207M   43M   10M  401M  201M 4808K 2404K
376565 user1         56  207M   43M   10M  456M  152M 4800K 1600K
376565 user1         56  207M   44M   10M  486M  162M 4064K 1354K
376565 user1         56  207M   52M  100M  191M   95M 1944K  972K
376565 user1         56  207M   55M  100M    0K    0K    0K    0K
376565 user1         56  207M   56M  100M    0K    0K    0K    0K
376565 user1         56  207M   56M  100M    0K    0K    0K    0K
376565 user1         56  207M   56M  100M    0K    0K    0K    0K
376565 user1         56  207M   56M  100M    0K    0K    0K    0K

プロジェクトのキャップの引き上げまたは最小のキャップ適用メモリー圧縮値の変更を通してキャップ適用を抑制することにより (rcapadm(1MSRM) のマニュアルページを参照)、常駐セットをワーキングセットにすることができます。この例でわかるように、rss 列はプロジェクトのワーキングセットサイズを示して安定することがあります。これは、絶え間なくページ障害を引き起こすことなくプロジェクトのプロセスが処理される最小のキャップ値です。

大域メモリーキャップの報告

rcapstat-g オプションを使用すると、以下の値が出力されます。

参考情報

For additional information, see rcapadm(1MSRM), rcapd(1MSRM), rcapstat(1SRM), limadm(1MSRM), and project(4).