次のリストは、システム上で構成されるクラスと、タイムシェアリングクラスのユーザー優先順位の範囲です。クラスの種類は次のとおりです。
システム (SYS)
対話型 (IA)
リアルタイム (RT)
プロセスのスケジュール優先順位とは、プロセススケジューラによって割り当てられる優先順位のことです。これらの優先順位は、スケジューラのスケジュールポリシーに従って割り当てられます。dispadmin コマンドを使用すると、デフォルトのスケジュールポリシーを表示できます。dispadmin コマンドの使用方法については、「スケジューラの構成」を参照してください。
priocntl コマンドを使用すると、プロセスを優先順位クラスに割り当て、プロセスの優先順位を管理できます。プロセスを管理するための priocntl コマンドの使用方法については、「優先順位を指定する方法」を参照してください。
priocntl -l コマンドを使用すると、プロセスクラスとスケジューリングパラメタを表示できます。
$ priocntl -l
次の例に priocntl -l コマンドからの出力を示します。
$ priocntl -l CONFIGURED CLASSES ================== SYS (System Class) TS (Time Sharing) Configured TS User Priority Range: -20 through 20
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
指定した優先順位を持つプロセスを起動します。
# priocntl -e -c class-muserlimit-p pri command_name
-e |
コマンドを実行する。 |
-c class |
プロセスを実行する範囲のクラスを指定する。デフォルトのクラスは TS (タイムシェアリング) または RT (リアルタイム) 。 |
-m userlimit |
-p オプションを使用するときに、優先順位を上下できる最大範囲を指定する。 |
-p pri command_name |
リアルタイムスレッド用に RT クラス内で相対優先順位を指定できるようにする。タイムシェアリングプロセスの場合は、-p オプションを使用すると -20 から +20 までのユーザー提供の優先順位を指定できる。 |
ps -ecl コマンドで、プロセスの状態を確認します。
# ps -ecl | grep command_name
次の例では、ユーザーが提供する最上位の優先順位を使用して find コマンドを起動します。
# priocntl -e -c TS -m 20 -p 20 find . -name core -print # ps -ecl | grep find
実行中のタイムシェアリングプロセスのスケジューリングパラメタを変更します。
# priocntl -s -m userlimit [-p userpriority] -i idtype idlist
-s |
ユーザー優先順位の範囲の上限を設定し、現在の優先順位を変更できる。 |
-m userlimit |
-p オプションを使用するときに、優先順位を上下できる最大範囲を指定する。 |
-p userpriority |
優先順位を指定できる。 |
-i idtype idlist |
「idtype」と「idlist」の組み合わせを使用してプロセスを識別する。「idtype」では PID や UID など、ID のタイプを指定する。 |
ps -ecl コマンドで、プロセスの状態を確認します。
# ps -ecl | grep idlist
次の例では、500 ミリ秒のタイムスライス、クラス RT 内の優先順位 20、グローバル優先順位 120 を指定して、コマンドを実行します。
# priocntl -e -c RT -t 500 -p 20 myprog # ps -ecl | grep myprog
プロセスをリアルタイムプロセスに変更したり、リアルタイムプロセスから変更したりするには、ユーザーはリアルタイムシェル内でスーパーユーザーであるか、または作業中でなければなりません。
プロセスのクラスを変更します。
# priocntl -s -c class -i idtype idlist
-s |
ユーザー優先順位の範囲について上限を設定し、現在の優先順位を変更できる。 |
-c class |
クラス TS またはクラス RT を指定して、プロセスのクラスを変更する。 |
-i idtype idlist |
idtype と idlist の組み合わせを使用してプロセスを識別する。idtype では PID や UID など、ID のタイプを指定する。 |
ps -ecl コマンドで、プロセスの状態を確認します。
# ps -ecl | grep idlist
次の例では、ユーザー 15249 が所有するすべてのプロセスをリアルタイムプロセスに変更します。
# priocntl -s -c RT -i uid 15249 # ps -ecl | grep 15249
スーパーユーザーとしてユーザープロセスをリアルタイムクラスに変更すると、その後ユーザーはリアルタイムのスケジューリングパラメタを (priocntl -s を使用して) 変更できません。
nice コマンドは、SunOS の旧バージョンとの下位互換性を保つためにのみサポートされます。priocntl コマンドを使用する方がプロセスを柔軟に管理できます。
プロセスの優先順位は、そのスケジュールクラスポリシーと nice number 番号によって決定されます。各タイムシェアリングプロセスは、ユーザーが与えた優先順位を加算して計算されるグローバル優先順位を持っています。これは、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 単位で増やしていますが負数の増分なのでプロセスの優先順位を下げます。
次のコマンドは、nice 番号を小さくしてコマンドの優先順位を上げます。
プロセスの優先順位を上げるには、次のコマンドを使用します。
/usr/bin/nice -10 command_name |
nice 番号を小さくしてコマンドの優先順位を上げる。 |
/usr/bin/nice - -10 command_name |
nice 番号を小さくしてコマンドの優先順位を上げる。最初のマイナス記号はオプションの記号で、第 2 のマイナス記号は負の数を示す。 |
上記のコマンドでは、nice 番号を小さくしてコマンド command_name の優先順位を上げます。第 2 のコマンドでは、2 つのマイナス記号が必要なので注意してください。
同じユーザーが所有する複数の同じジョブがないかどうかを調べます。ジョブが終了するまで待たずに多数のバックグラウンドジョブを起動するスクリプトを実行した場合に、この問題が発生することがあります。
実行中のプロセスの優先順位が高すぎないかどうかを調べます。ps -c と入力して CLS フィールドを調べると、各プロセスのスケジューラクラスが表示されます。リアルタイム (RT) プロセスとして実行中のプロセスが CPU を独占している可能性があります。また、nice 値の大きいタイムシェアリング (TS) プロセスがないかどうかを調べます。スーパーユーザー特権を持つユーザーが、このプロセスの優先順位を上げすぎた可能性があります。システム管理者は、nice コマンドを使用して優先順位を下げることができます。