Solaris のシステム管理 (上級編)

プロセスクラス情報の管理

次のリストは、システム上で構成されるクラスと、タイムシェアリングクラスのユーザー優先順位の範囲です。クラスの種類は次のとおりです。

priocntl を使用してプロセスのスケジュール優先順位を変更する

プロセスのスケジュール優先順位とは、プロセススケジューラによって割り当てられる優先順位のことです。これらの優先順位は、スケジューラのスケジュールポリシーに従って割り当てられます。dispadmin コマンドを使用すると、デフォルトのスケジュールポリシーを表示できます。

priocntl コマンドを使用して、プロセスを優先順位クラスに割り当てて、プロセスの優先順位を管理できます。priocntl コマンドを使用してプロセスを管理する手順については、「プロセスの優先順位を指定する方法」を参照してください。

プロセスクラスに関する基本情報を表示する方法

priocntl -l コマンドを使用すると、プロセスのスケジューリングクラス と優先順位の範囲を表示できます。


$ priocntl -l

例 - プロセスクラスに関する基本情報を表示する

次の例に priocntl -l コマンドからの出力を示します。


# priocntl -l
CONFIGURED CLASSES
==================

SYS (System Class)

TS (Time Sharing)
        Configured TS User Priority Range: -60 through 60

IA (Interactive)
        Configured IA User Priority Range: -60 through 60

RT (Real Time)
        Maximum Configured RT Priority: 59

プロセスのグローバル優先順位を表示する方法

ps コマンドを使用して、プロセスのグローバル優先順位を表示できます。


$ ps -ecl

グローバル優先順位は、PRI カラムの下に表示されます。

例 - プロセスのグローバル優先順位を表示する

次の例は、ps -ecl コマンドの出力を示します。PRI カラム内のデータは、pageout プロセスが最上位の優先順位を持ち、sh が最下位の優先順位であることを示しています。


$ ps -ecl
 F S UID PID  PPID CLS PRI  ADDR      SZ  WCHAN    TTY      TIME   COMD
19 T 0   0    0    SYS 96   f00d05a8   0           ?        0:03  sched
 8 S 0   1    0    TS  50   ff0f4678 185  ff0f4848 ?       36:51   init
19 S 0   2    0    SYS 98   ff0f4018   0  f00c645c ?        0:01 pageout
19 S 0   3    0    SYS 60   ff0f5998   0  f00d0c68 ?      241:01 fsflush
 8 S 0   269  1    TS  58   ff0f5338 303  ff49837e ?        0:07    sac
 8 S 0   204  1    TS  43   ff2f6008  50  ff2f606e console  0:02     sh
 

プロセスの優先順位を指定する方法

  1. スーパーユーザーになります。

  2. 指定した優先順位でプロセスを起動します。


    # priocntl -e -c class -m userlimit -p pri command-name
    

    -e

    コマンドを実行する 

    -c class

    プロセスを実行する範囲のクラスを指定する。有効なクラスは TS (タイムシェアリング)、RT (リアルタイム)、IA (対話型)、FSS (フェアシェア)、または FX (固定優先順位) です。

    -m userlimit

    -p オプションを使用するときに、優先順位を上下できる最大範囲を指定する

    -p pri command-name

    リアルタイムスレッド用に RT クラス内で相対優先順位を指定できるようにする。タイムシェアリングプロセスの場合は、-p オプションを使用すると -60 から +60 までのユーザー指定の優先順位を指定できる

  3. プロセス状態を確認します。


    # ps -ecl | grep command-name
    

例 - プロセスの優先順位を指定する

次の例では、ユーザーが指定する最上位の優先順位を使用して find コマンドを開始します。


# priocntl -e -c TS -m 60 -p 60 find . -name core -print
# ps -ecl | grep find

タイムシェアリングプロセスのスケジューリングパラメータを変更する方法

  1. スーパーユーザーになります。

  2. 実行中のタイムシェアリングプロセスのスケジューリングパラメータを変更します。


    # priocntl -s -m userlimit [-p userpriority] -i idtype idlist
    

    -s

    ユーザー優先順位の範囲について上限を設定し、現在の優先順位を変更する 

    -m userlimit

    -p オプションを使用するときに、優先順位を上下できる最大範囲を指定する

    -p userpriority

    優先順位を指定する 

    -i idtype idlist

    idtypeidlist の組み合わせを使用してプロセスを識別する。idtype では PIDUID など、ID のタイプを指定する。idlist を使用して、pid または UID のリストを識別する

  3. プロセス状態を確認します。


    # ps -ecl | grep idlist
    

例 - タイムシェアリングプロセスのスケジューリングパラメータを変更する

次の例では、500 ミリ秒のタイムスライス、クラス RT 内の優先順位 20、グローバル優先順位 120 を指定して、コマンドを実行します。


# priocntl -e -c RT -t 500 -p 20 myprog
# ps -ecl | grep myprog

プロセスのクラスを変更する方法

  1. (省略可能) スーパーユーザーになります。


    注 -

    プロセスをリアルタイムプロセスに変更したり、リアルタイムプロセスから変更したりするには、ユーザーはスーパーユーザーであるか、リアルタイムシェル内で作業中でなければなりません。


  2. プロセスのクラスを変更します。


    # priocntl -s -c class -i idtype idlist
    

    -s

    ユーザー優先順位の範囲について上限を設定し、現在の優先順位を変更する 

    -c class

    クラス TS またはクラス RT を指定して、プロセスのクラスを変更する

    -i idtype idlist

    idtypeidlist の組み合わせを使用してプロセスを識別する。idtype では PIDUID など、ID のタイプを指定する。idlist を使用して、pid または UID のリストを識別する

  3. プロセス状態を確認します。


    # ps -ecl | grep idlist
    

例 - プロセスのクラスを変更する

次の例では、ユーザー 15249 が所有するすべてのプロセスをリアルタイムプロセスに変更します。


# priocntl -s -c RT -i uid 15249
# ps -ecl | grep 15249

注 -

スーパーユーザーとしてユーザープロセスをリアルタイムクラスに変更すると、そのユーザーは priocntl -s を使用して、リアルタイムのスケジューリングパラメータを変更できません。


nice を使用してタイムシェアリングプロセスの優先順位を変更する

nice コマンドは、SunOS の旧バージョンとの下位互換性を保つためにのみサポートされます。priocntl コマンドを使用する方がプロセスを柔軟に管理できます。

プロセスの優先順位は、そのスケジュールクラスポリシーと nice 番号によって決定されます。各タイムシェアリングプロセスは、グローバル優先順位を持っています。グローバル優先順位は、ユーザーが指定した優先順位 (nice コマンドまたは priocntl コマンドの影響を受ける) とシステムで計算された優先順位を加算して算出されます。

プロセスの実行優先順位番号は、オペレーティングシステムによって割り当てられ、スケジュールクラス、使用される CPU 時間、nice 値 (タイムシェアリングプロセスの場合) などの複数の要素によって決定されます。

各タイムシェアリングプロセスは、親プロセスから継承したデフォルトの nice 番号で起動します。nice 値は、ps レポートの NI カラムに表示されます。

ユーザーは、自分が与える nice 番号優先順位を大きくしてプロセスの優先順位を下げることができます。ただし、nice 番号を小さくしてプロセスの優先順位を上げることができるのは、スーパーユーザー (または root) だけです。これは、ユーザーが各自のプロセスの優先順位を大きくして CPU の独占比率を高めるのを防ぐためです。

nice 番号の範囲は 0 から +40 までで、0 が最上位の優先順位となります。デフォルト値は 20 です。nice コマンドには利用できるバージョンが 2 つあり、一方は標準バージョンの /usr/bin/nice で、他方は C シェルの一部となっているバージョンです。

プロセスの優先順位を変更する方法

nice 番号を変更して、コマンドやプロセスの優先順位を変更できます。プロセスの優先順位を下げるには、次のコマンドを使用します。

/usr/bin/nice command-name

nice 番号を 4 単位増やす (デフォルト)

/usr/bin/nice +4 command-name

nice 番号を 4 単位増やす

/usr/bin/nice -10 command-name

nice 番号を 10 単位増やす

第 1 と第 2 のコマンドは、nice 番号を 4 単位増やします (デフォルト)。第 3 のコマンドは、nice 番号を 10 単位増やします。3 つのすべてのコマンドは、プロセスの優先順位を下げます。

次のコマンドは、nice 番号を小さくしてコマンドの優先順位を上げます。

プロセスの優先順位を上げるには、次のいずれかを使用します。

/usr/bin/nice -10 command-name

nice 番号を 10 単位小さくしてコマンドの優先順位を上げる。

/usr/bin/nice --10 command-name

nice 番号を 10 単位小さくしてコマンドの優先順位を上げる。最初のマイナス記号はオプション記号です。2 番目のマイナス記号は負の数を表します。

システムのプロセスに関する問題解決方法

すでに判明している問題の解決方法のヒントを次に示します。