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

第 3 章 プロジェクトとタスクの管理

この章では、Solaris の資源管理機能のうち、プロジェクトおよびタスク機能の使用方法について説明します。

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

プロジェクトとタスクの機能の概要については、第 2 章プロジェクトとタスク (概要)を参照してください。


注 –

これらの機能をゾーンがインストールされている Solaris システムで使用する場合は、非大域ゾーンでこれらのコマンドを実行すると、プロセス ID を受け取るシステムコールインタフェースを通して、同じゾーン内のプロセスだけが認識されます。


プロジェクトとタスクの管理 (作業マップ)

タスク 

説明 

説明 

プロジェクトとタスクで使用するコマンドとオプションの例を表示します。 

タスク ID とプロジェクト ID を表示し、システムで現在実行されているプロセスとプロジェクトについて各種の統計情報を表示します。 

「コマンドとコマンドオプションの例」

プロジェクトを定義します。 

/etc/project ファイルにプロジェクトエントリを追加し、そのエントリの値を変更します。

「プロジェクトを定義して現在のプロジェクトを表示する方法」

プロジェクトを削除します。 

/etc/project ファイルからプロジェクトエントリを削除します。

/etc/project ファイルからプロジェクトを削除する方法」

project ファイルまたはプロジェクトデータベースを検証します。

/etc/project ファイルの構文を検査します。または、外部のネームサービスと照合してプロジェクト名およびプロジェクト ID の一意性を確認します。

/etc/project ファイルの内容を検証する方法」

プロジェクトのメンバーシップ情報を取得します。 

起動中のプロセスの現在のプロジェクトメンバーシップを表示します。 

「プロジェクトのメンバーシップ情報を取得する方法」

新しいタスクを作成します。 

newtask コマンドを使用して、特定のプロジェクトに新しいタスクを作成します。

「新しいタスクを作成する方法」

実行中のプロセスを別のタスクとプロジェクトに関連付けます。 

指定されたプロジェクト内の新しいタスク ID にプロセス番号を関連付けます。 

「実行中のプロセスを新しいタスクに移動する方法」

プロジェクト属性を追加し、操作します。 

プロジェクトデータベースの管理コマンドを使用して、プロジェクト属性の追加、編集、検証、および削除を行います。 

「プロジェクト属性の編集と検証」

コマンドとコマンドオプションの例

この節では、プロジェクトとタスクで使用するコマンドとオプションの例を示します。

プロジェクトとタスクで使用するコマンドオプション

ps コマンド

タスクおよびプロジェクトの ID を表示するには、ps コマンドに -o オプションを付けて実行します。たとえば、プロジェクト ID を表示するには、次のように入力します。


# ps -o user,pid,uid,projid
USER PID   UID  PROJID
jtd  89430 124  4113

id コマンド

ユーザーおよびグループ ID に加えて、現在のプロジェクト ID を表示するには、id コマンドに -p オプションを付けて実行します。user オペランドを指定した場合、そのユーザーの通常のログインに関連付けられたプロジェクトが表示されます。


#  id -p
uid=124(jtd) gid=10(staff) projid=4113(booksite)

pgrep コマンドと pkill コマンド

特定のリスト内のプロジェクト ID と一致するプロセスだけを表示するには、pgrep コマンドと pkill コマンドに -J オプションを付けて実行します。


# pgrep -J projidlist
# pkill -J projidlist

特定のリスト内のタスク ID と一致するプロセスだけを表示するには、pgrep コマンドと pkill コマンドに -T オプションを付けて実行します。


# pgrep -T taskidlist
# pkill -T taskidlist

prstat コマンド

システムで現在実行中のプロセスとプロジェクトのさまざまな統計情報を表示するには、prstat コマンドに -J オプションを付けて実行します。


% prstat -J
	  PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP
 21634 jtd      5512K 4848K cpu0    44    0   0:00.00 0.3% prstat/1
   324 root       29M   75M sleep   59    0   0:08.27 0.2% Xsun/1
 15497 jtd        48M   41M sleep   49    0   0:08.26 0.1% adeptedit/1
   328 root     2856K 2600K sleep   58    0   0:00.00 0.0% mibiisa/11
  1979 jtd      1568K 1352K sleep   49    0   0:00.00 0.0% csh/1
  1977 jtd      7256K 5512K sleep   49    0   0:00.00 0.0% dtterm/1
   192 root     3680K 2856K sleep   58    0   0:00.36 0.0% automountd/5
  1845 jtd        24M   22M sleep   49    0   0:00.29 0.0% dtmail/11
  1009 jtd      9864K 8384K sleep   49    0   0:00.59 0.0% dtwm/8
   114 root     1640K  704K sleep   58    0   0:01.16 0.0% in.routed/1
   180 daemon   2704K 1944K sleep   58    0   0:00.00 0.0% statd/4
   145 root     2120K 1520K sleep   58    0   0:00.00 0.0% ypbind/1
   181 root     1864K 1336K sleep   51    0   0:00.00 0.0% lockd/1
   173 root     2584K 2136K sleep   58    0   0:00.00 0.0% inetd/1
   135 root     2960K 1424K sleep    0    0   0:00.00 0.0% keyserv/4
PROJID    NPROC  SIZE   RSS MEMORY      TIME  CPU PROJECT
    10       52  400M  271M    68%   0:11.45 0.4% booksite
     0       35  113M  129M    32%   0:10.46 0.2% system

Total: 87 processes, 205 lwps, load averages: 0.05, 0.02, 0.02

システムで現在実行中のプロセスとタスクのさまざまな統計情報を表示するには、prstat コマンドに -T オプションを付けて実行します。


% prstat -T
   PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP
 23023 root       26M   20M sleep   59    0   0:03:18 0.6% Xsun/1
 23476 jtd        51M   45M sleep   49    0   0:04:31 0.5% adeptedit/1
 23432 jtd      6928K 5064K sleep   59    0   0:00:00 0.1% dtterm/1
 28959 jtd        26M   18M sleep   49    0   0:00:18 0.0% .netscape.bin/1
 23116 jtd      9232K 8104K sleep   59    0   0:00:27 0.0% dtwm/5
 29010 jtd      5144K 4664K cpu0    59    0   0:00:00 0.0% prstat/1
   200 root     3096K 1024K sleep   59    0   0:00:00 0.0% lpsched/1
   161 root     2120K 1600K sleep   59    0   0:00:00 0.0% lockd/2
   170 root     5888K 4248K sleep   59    0   0:03:10 0.0% automountd/3
   132 root     2120K 1408K sleep   59    0   0:00:00 0.0% ypbind/1
   162 daemon   2504K 1936K sleep   59    0   0:00:00 0.0% statd/2
   146 root     2560K 2008K sleep   59    0   0:00:00 0.0% inetd/1
   122 root     2336K 1264K sleep   59    0   0:00:00 0.0% keyserv/2
   119 root     2336K 1496K sleep   59    0   0:00:02 0.0% rpcbind/1
   104 root     1664K  672K sleep   59    0   0:00:03 0.0% in.rdisc/1
TASKID    NPROC  SIZE   RSS MEMORY      TIME  CPU PROJECT                     
   222       30  229M  161M    44%   0:05:54 0.6% group.staff                 
   223        1   26M   20M   5.3%   0:03:18 0.6% group.staff                 
    12        1   61M   33M   8.9%   0:00:31 0.0% group.staff                 
     1       33   85M   53M    14%   0:03:33 0.0% system                      

Total: 65 processes, 154 lwps, load averages: 0.04, 0.05, 0.06	

注 –

-J オプションと -T オプションを一緒に使用することはできません。


プロジェクトとタスクでの cronsu の使用

cron コマンド

cron コマンドは、settaskid を発行し、実行を要求したユーザーの適切なデフォルトプロジェクトを使用して、cronat、および batch の各ジョブが別のタスクで実行されるようにします。また、at および batch コマンドは、現在のプロジェクト ID を取得して at ジョブを実行するときにプロジェクト ID が復元されるようにします。

su コマンド

su コマンドは、ログインのシミュレーションの一環として、新しいタスクを作成することによってターゲットユーザーのデフォルトプロジェクトに参加します。

su コマンドを使用してユーザーのデフォルトプロジェクトを切り替えるには、次のように入力します。


# su user

プロジェクトの管理

Procedureプロジェクトを定義して現在のプロジェクトを表示する方法

次の例は、projadd コマンドを使用してプロジェクトエントリを追加し、projmod コマンドを使用してそのエントリを変更する方法を示します。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。

  2. projects -l を使用して、システムのデフォルトの /etc/project ファイルを表示します。


    # projects -l
    system:0::::
    user.root:1::::
    noproject:2::::
    default:3::::
    group.staff:10::::system
            projid : 0
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    user.root
            projid : 1
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    noproject
            projid : 2
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    default
            projid : 3
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    group.staff
            projid : 10
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
  3. booksite という名前のプロジェクトを追加します。追加したプロジェクトを mark という名前のユーザーにプロジェクト ID 番号 4113 で割り当てます。


    # projadd -U mark -p 4113 booksite
    
  4. 再度 /etc/project ファイルを表示します。


    # projects -l
    system
            projid : 0
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    user.root
            projid : 1
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    noproject
            projid : 2
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    default
            projid : 3
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    group.staff
            projid : 10
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    booksite
            projid : 4113
            comment: ""
            users  : mark
            groups : (none)
            attribs: 
  5. comment フィールドにプロジェクトを説明するコメントを追加します。


    # projmod -c `Book Auction Project' booksite
    
  6. /etc/project ファイルに加えた変更を確認します。


    # projects -l
    system
            projid : 0
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    user.root
            projid : 1
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    noproject
            projid : 2
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    default
            projid : 3
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    group.staff
            projid : 10
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    booksite
            projid : 4113
            comment: "Book Auction Project"
            users  : mark
            groups : (none)
            attribs: 
参照

プロジェクト、タスク、およびプロセスをプールに結合する方法については、「プール属性の設定とプールへの結合」を参照してください。

Procedure/etc/project ファイルからプロジェクトを削除する方法

次の例は、projdel コマンドを使ってプロジェクトを削除する方法を示します。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。

  2. projdel コマンドを使ってプロジェクト booksite を削除します。


    # projdel booksite
    
  3. /etc/project ファイルを表示します。


    # projects -l
    system
            projid : 0
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    user.root
            projid : 1
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    noproject
            projid : 2
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    default
            projid : 3
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    group.staff
            projid : 10
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
  4. ユーザー名 mark でログインして、projects と入力し、このユーザーに割り当てられているプロジェクトを表示します。


    # su - mark
    # projects
    default

/etc/project ファイルの内容を検証する方法

編集オプションが指定されていない場合、projmod コマンドは project ファイルの内容を検証します。

NIS マップを検証するには、スーパーユーザーとして次のように入力します。


# ypcat project | projmod -f —

注 –

ypcat project | projmod -f — コマンドはまだ実装されていません。


/etc/project ファイルの構文を検査するには、次のように入力します。


# projmod -n

プロジェクトのメンバーシップ情報を取得する方法

-p フラグを付けて id コマンドを使用し、起動中のプロセスの現在のプロジェクトメンバーシップを表示します。


$ id -p
uid=100(mark) gid=1(other) projid=3(default)

Procedure新しいタスクを作成する方法

  1. 作成先となるプロジェクト booksite のメンバーとしてログインします。

  2. booksite プロジェクト内に新しいタスクを作成します。 それには、システムのタスク ID を取得するための -v (冗長) オプションを指定して newtask コマンドを実行します。


    machine% newtask -v -p booksite
    16

    newtask を実行すると、指定したプロジェクト内に新しいタスクが作成され、そのタスクにユーザーのデフォルトのシェルが置かれます。

  3. 起動中のプロセスの現在のプロジェクトメンバーシップを表示します。


    machine% id -p
    uid=100(mark) gid=1(other) projid=4113(booksite)

    今度は、プロセスが新しいプロジェクトのメンバーになっています。

Procedure実行中のプロセスを新しいタスクに移動する方法

次の例は、実行中のプロセスを別のタスクと新しいプロジェクトに関連付ける方法を示します。この操作を実行するには、スーパーユーザーでなければなりません。または、プロセスの所有者で、かつ新しいプロジェクトのメンバーでなければなりません。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。


    注 –

    プロセスの所有者または新しいプロジェクトのメンバーであれば、この手順は省略できます。


  2. book_catalog プロセスのプロセス ID を取得します。


    # pgrep book_catalog
    	8100
  3. プロセス 8100 を、新しいタスク ID を使って booksite プロジェクトに関連付けます。


    # newtask -v -p booksite -c 8100
    	17

    -c オプションは、newtask が指定された既存のプロセスに対して動作することを指定します。

  4. タスクとプロセス ID の対応を確認します。


    # pgrep -T 17
    	8100

プロジェクト属性の編集と検証

プロジェクトデータベースの管理コマンド projadd および projmod を使用して、プロジェクト属性を編集できます。

-K オプションは、属性の置換リストを指定します。属性はセミコロン (;) で区切られます。-K オプションを -a オプションとともに使用すると、その属性または属性値が追加されます。-K オプションを -r オプションとともに使用すると、その属性または属性値が削除されます。-K オプションを -s オプションとともに使用すると、その属性または属性値が置換されます。

Procedure属性と属性値をプロジェクトに追加する方法

プロジェクトの属性に値を追加するには、projmod コマンドに -a オプションと -K オプションを付けて実行します。属性が存在しない場合は、新たに作成されます。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。

  2. プロジェクト myproject 内に task.max-lwps 資源制御属性を値なしで追加します。プロジェクトに加わるタスクでは、その属性にシステム値だけが設定されます。


    # projmod -a -K task.max-lwps myproject
    
  3. その後、プロジェクト myproject 内の task.max-lwps に値を追加できます。この値は、特権レベル、しきい値、およびしきい値に達したときのアクションから成ります。


    # projmod -a -K "task.max-lwps=(priv,100,deny)" myproject
    
  4. 資源制御は複数の値を持つことができるので、同じオプションを使用して、既存の値リストに別の値を追加できます。


    # projmod -a -K "task.max-lwps=(priv,1000,signal=KILL)" myproject
    

    複数の値はコンマで区切られます。task.max-lwps エントリはこの時点で次のようになっています。


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

Procedure属性値をプロジェクトから削除する方法

この手順では次の値を仮定します。


task.max-lwps=(priv,100,deny),(priv,1000,signal=KILL)
  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。

  2. プロジェクト myproject 内の資源制御 task.max-lwps から属性値を削除するには、projmod コマンドに -r オプションと -K オプションを付けて実行します。


    # projmod -r -K "task.max-lwps=(priv,100,deny)" myproject
    

    task.max-lwps が次のように複数の値を持っているとします。


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

    この場合は、最初に一致する値が削除されます。したがって、結果は次のようになります。


    task.max-lwps=(priv,1000,signal=KILL)

Procedure資源制御属性をプロジェクトから削除する方法

資源制御 task.max-lwps をプロジェクト myproject から削除するには、projmod コマンドに -r オプションと -K オプションを付けて実行します。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。

  2. 属性 task.max-lwps とそのすべての値を、プロジェクト myproject から削除します。


    # projmod -r -K task.max-lwps myproject
    

Procedureプロジェクトの属性と属性値を置換する方法

プロジェクト myproject 内の資源制御 task.max-lwps の属性値を別の値で置換するには、projmod コマンドに -s オプションと -K オプションを付けて実行します。属性が存在しない場合は、新たに作成されます。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。

  2. task.max-lwps の現在の値を、次に示す新しい値で置換します。


    # projmod -s -K "task.max-lwps=(priv,100,none),(priv,120,deny)" myproject
    

    結果は次のようになります。


    task.max-lwps=(priv,100,none),(priv,120,deny)

Procedure資源制御属性の既存の値を削除する方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。

  2. task.max-lwps の現在の値をプロジェクト myproject から削除するには、次のように入力します。


    # projmod -s -K task.max-lwps myproject