nice コマンドと renice コマンドを使用して Linux プロセスの優先順位を設定する方法
この記事では、 上記以外のトピックであるカーネル スケジューラ (プロセス スケジューラとも呼ばれます) とプロセスの優先順位について簡単に説明します。このガイドの範囲。次に、Linux プロセス管理について少し詳しく説明します。変更された優先順位でプログラムまたはコマンドを実行する方法と、実行中の Linux プロセスの優先順位を変更する方法を確認します。
こちらもお読みください: Linux プロセスを監視し、ユーザーごとにプロセス制限を設定する方法
Linux カーネル スケジューラについて
カーネル スケジューラは、実行可能なすべてのプロセスの中から次に実行するのに最適なプロセスを決定するカーネルのユニットです。システム上の実行可能なプロセス間にプロセッサ時間を割り当てます。実行可能なプロセスとは、CPU 時間だけを待機しているプロセスであり、実行する準備ができています。
スケジューラは Linux のマルチタスクの中核を形成し、優先度ベースのスケジューリング アルゴリズムを使用してシステム内で実行可能なプロセスを選択します。最も価値のあるプロセスと CPU 時間の必要性に基づいてプロセスをランク付けします。
プロセスの優先順位と Nice Value を理解する
カーネルは、プロセスに関連付けられたスケジューリング優先度であるプロセス優先度を含む、プロセスに関する大量の情報を保存します。優先度の高いプロセスは優先度の低いプロセスより前に実行され、同じ優先度のプロセスは次々に繰り返しスケジュールされます。
Linux には合計 140 の優先順位と 2 つの異なる優先順位範囲が実装されています。最初の値は、-20
(最高の優先順位の値) から 19
(最低の優先順位の値) までの範囲の Nice 値 (niceness) です。デフォルトは 0
で、これについてはこのガイドで説明します。もう 1 つはリアルタイム優先度で、デフォルトの範囲は 1 ~ 99 で、次に 100 ~ 139 です。ユーザー空間を対象としています。
Linux の重要な特性の 1 つは、優先度ベースの動的なスケジューリングです。これにより、後で説明するように、プロセスの Nice 値をニーズに応じて変更 (増加または減少) できます。
Linux プロセスの Nice 価値を確認する方法
プロセスの適切な値を確認するには、ps、top、htop などのユーティリティを使用できます。
ps コマンドを使用してプロセスの nice 値をユーザー定義形式で表示するには (ここでは NI
列がプロセスの nice 値を示します)。
ps -eo pid,ppid,ni,comm
あるいは、top または htop ユーティリティを使用して、次のように Linux プロセスの nice 値を表示することもできます。
top
htop
PRまたはPRIとNIの違い
上記の top と htop の出力から、それぞれ PR
と PRI
という列があることがわかります。プロセスの優先度を示します。
したがって、これは次のことを意味します。
NI
– これはユーザー空間の概念である優れた値ですが、PR
またはPRI
– Linux カーネルから見た、プロセスの実際の優先度です。
PR または PRI 値の計算方法
Total number of priorities = 140
Real time priority range(PR or PRI): 0 to 99
User space priority range: 100 to 139
適切な値の範囲 (NI): -20 ~ 19
PR = 20 + NI
PR = 20 + (-20 to + 19)
PR = 20 + -20 to 20 + 19
PR = 0 to 39 which is same as 100 to 139.
ただし、以下のスクリーンショットに示されているように、数字ではなく rt
が表示されている場合は、基本的にプロセスがリアルタイム スケジュールの優先順位で実行されていることを意味します。
Linux で指定された Nice 値を指定してコマンドを実行する方法
ここでは、プログラムまたはコマンドの CPU 使用率に優先順位を付ける方法を見ていきます。非常に CPU を使用するプログラムやタスクがあり、完了までに時間がかかる可能性があることも理解している場合は、nice コマンドを使用して、その優先順位を高くまたは好ましいものに設定できます。
構文は次のとおりです。
nice -n niceness-value [command args]
OR
nice -niceness-value [command args] #it’s confusing for negative values
OR
nice --adjustment=niceness-value [command args]
重要:
- 値が指定されていない場合、nice はデフォルトで優先順位 10 を設定します。
- nice なしで実行されるコマンドまたはプログラムの優先順位はデフォルトで 0 になります。
- root のみが、優先順位を上げてコマンドまたはプログラムを実行できます。
- 通常のユーザーは、優先度の低いコマンドまたはプログラムのみを実行できます。
たとえば、プログラムまたはコマンドをデフォルトの優先順位で起動する代わりに、次の nice コマンドを使用して特定の優先順位で起動できます。
sudo nice -n 5 tar -czf backup.tar.gz ./Documents/*
OR
sudo nice --adjustment=5 tar -czf backup.tar.gz ./Documents/*
特に負のniceness値の場合は少し混乱する3番目の方法を使用することもできます。
sudo nice -5 tar -czf backup.tar.gz ./Documents/*
Linux でプロセスのスケジュール優先順位を変更する
前に述べたように、Linux では優先度に基づいた動的なスケジューリングが可能です。したがって、プログラムがすでに実行されている場合は、 次の形式のrenice コマンドを使用してその優先度を変更できます。
renice -n -12 -p 1055
renice -n -2 -u apache
以下のサンプル上部出力から、PID 1055 の teamspe+ の Niceness は -12
になり、すべてのユーザー apache が所有するプロセスは -2
です。
この出力を引き続き使用すると、式 PR=20 + NI が成立することがわかります。
PR for ts3server = 20 + -12 = 8
PR for apache processes = 20 + -2 = 18
renice コマンドを使用してユーザーのプロセスの nice 値に加えた変更は、次回再起動するまでのみ適用されます。永続的なデフォルト値を設定するには、次のセクションをお読みください。
特定のユーザーのプロセスのデフォルトの Nice 値を設定する方法
特定のユーザーまたはグループのデフォルトの nice 値を /etc/security/limits.conf ファイルに設定できます。その主な機能は、PAM 経由でログインしたユーザーのリソース制限を定義することです。
ユーザーの制限を定義するための構文は次のとおりです (さまざまな列の可能な値についてはファイルで説明されています)。
#<domain> <type> <item> <value>
次に、以下の構文を使用します。ここで、ハードはハード リンクを強制することを意味し、ソフトはソフト制限を強制することを意味します。
<username> <hard|soft> priority <nice value>
あるいは、/etc/security/limits.d/ にファイルを作成して、上記のメイン ファイルの設定をオーバーライドすると、これらのファイルはアルファベット順に読み取られます。
まず、ユーザー tecmint のファイル /etc/security/limits.d/tecmint-priority.conf を作成します。
vi /etc/security/limits.d/tecmint-priority.conf
次に、この構成をそこに追加します。
tecmint hard priority 10
ファイルを保存して閉じます。今後、tecmint が所有するプロセスには、10 の Nice 値と 30 の PR が設定されます。
詳細については、nice と renice のマニュアル ページを参照してください。
man nice
man renice
Linux プロセス管理に関する次の記事もお読みください。
- Linux で実行中のプロセスを見つけて強制終了する方法
- Linux でプロセスを終了する Kill、Pkill、および Killall コマンドのガイド
- システムの使用状況、停止を監視し、Linux サーバーのトラブルシューティングを行う方法
- CPUTool – Linux のあらゆるプロセスの CPU 使用率を制限および制御
この記事では、カーネル スケジューラ、プロセスの優先順位について簡単に説明し、優先順位を変更してプログラムまたはコマンドを実行する方法、およびアクティブな Linux プロセスの優先順位を変更する方法について説明しました。このトピックに関するご意見は、以下のフィードバック フォームから共有できます。