Linux / proc / loadavg(平均負荷)



Linux Proc Loadavg



Linux / proc / loadavg(平均負荷)

まず、システムの平均負荷(負荷平均)とは何ですか?
Linuxシステムでは、uptime、w、top、およびその他のコマンドは、システムの平均負荷負荷平均の出力を持ちます。それでは、平均システム負荷はどれくらいですか?
平均システム負荷は、特定の時間間隔中にキューで実行されているプロセスの平均数として定義されます。プロセスが次の条件を満たす場合、プロセスは実行キューに入れられます。
-I / O操作の結果を待機していません
-アクティブに待機状態になりません(つまり、「待機」の呼び出しはありません)
-停止していません(例:終了を待機中)
例えば:
[root @ xxxxx root]#稼働時間
午後7時51分まで2日間、5:43、2ユーザー、平均負荷:8.13、5.90、4.94
コマンド出力の最後の内容は、過去1、5、および15分間の実行キュー内のプロセスの平均数を示します。
1.一般的に、CPUあたりの現在アクティブなプロセスの数が3以下である限り、システムのパフォーマンスは良好です。 CPUあたりのタスク数が5を超える場合、これはマシンのパフォーマンスに深刻な問題があることを意味します。上記の例では、システムに2つのCPUがあると仮定すると、CPUあたりの現在のタスク数は8.13 / 2 = 4.065です。これは、システムのパフォーマンスが許容範囲内であることを意味します。



2. The data is checked every 5 seconds for the number of active processes, and then calculated based on this value. If this number is divided by the number of CPUs, a result higher than 5 indicates that the system is overloaded. 3. What is load? Load is the number of active_tasks in the computer within a certain period of time, that is, the length of the task execution queue of the computer, and the queue calculated by the cpu. How much is the load normal? Since load is a queue for cpu calculation, it should be related to the cpu processing method and the number of cpu. Therefore, I personally think that the critical value of load should be determined according to the number of CPUs identified by the system. The system recognizes 8 cpus, then load 8 is the critical point, and high and 8 are over load. What is the number of cpu systems identified by the system? I think so, here is the problem of cpu physical number and hyper-threading technology. Personally think that 4 physical cpu and 2 dual cores can not be equal, of course, this is the physical level! All four CPUs are identified in the system. Therefore, the system identification should prevail. After all, the system is going to dominate his use. CPU high is not equal to load high On Unix/Linux, you may often encounter cpu usage of 100%, but the load is not high! Why is this? Because almost all tasks interact with the CPU, but because of the different frequency of use of each device, it causes problems that cannot be synchronized. For example, when reading and writing to the hard disk, when the IO waits, the CPU has actually been switched to another process. The task is in a wait state. When there are too many such tasks, the queue length is too large, which means that the load is too large, but actually the CPU is allocated to perform other tasks or idle, so the CPU is not high. Equivalent to load high, load high can not be high in cpu.

第二に、負荷平均アルゴリズム
上記の出力データは、5秒ごとにチェックされ、この値に基づいて計算されたアクティブなプロセスの数です。この数をCPUの数で割ると、5より大きい結果は、システムが過負荷になっていることを示します。アルゴリズム(Linux 2.4のカーネルコードから抽出)は次のとおりです。
ファイル:include / linux / sched.h:
#define FSHIFT 11 / *精度のビット数 /
#define FIXED_1(1<#define LOAD_FREQ (5
HZ)/ * 5秒間隔 /
#define EXP_1 1884 /
固定小数点として1 / exp(5sec / 1min)、2048 / pow(exp(1)、5.0 / 60) /
#define EXP_5 2014 /
1 / exp(5sec / 5min)、2048 / pow(exp(1)、5.0 / 300) /
#define EXP_15 2037 /
1 / exp(5sec / 15min)、2048 / pow(exp(1)、5.0 / 900) /
#define CALC_LOAD(load、exp、n)
負荷 = exp
負荷= n
(FIXED_1-exp)
ロード>> = FSHIFT
/
/
ファイル:kernel / timer.c:
unsigned long avenrun [3]
static inline void calc_load(unsigned long ticks)
{{
unsigned long active_tasks /
固定小数点 /
static int count = LOAD_FREQ
カウント-=ティック
if(カウント<0) {
カウント= LOAD_FREQ
active_tasks = count_active_tasks()
CALC_LOAD(avenrun [0]、EXP_1、active_tasks)
CALC_LOAD(avenrun [1]、EXP_5、active_tasks)
CALC_LOAD(avenrun [2]、EXP_15、active_tasks)
}
}
/
* /
ファイル:fs / proc / proc_misc.c:
#define LOAD_INT(x)((x)>> FSHIFT)
#define LOAD_FRAC(x)LOAD_INT(((x)&(FIXED_1-1))* 100)

static int loadavg_read_proc(char * page、char ** start、off_t off、
int count、int * eof、void * data)
{{
int a、b、c
int len
a = avenrun [0](FIXED_1 / 200)
b = avenrun [1](FIXED_1 / 200)
c = avenrun [2](FIXED_1 / 200)
len = sprintf(ページ、 '%d.d%d.d%d.d%ld /%d%d'、
LOAD_INT(a)、LOAD_FRAC(a)、
LOAD_INT(b)、LOAD_FRAC(b)、
LOAD_INT©、LOAD_FRAC©、
nr_running()、nr_threads、last_pid)
proc_calc_metrics(page、start、off、count、eof、len)を返します
}



第三に、各データの/ proc / loadavgの意味
/ procファイルシステムは、ディスク領域を占有しない仮想ファイルシステムです。これは、メモリで実行されている現在のオペレーティングシステムを反映しています。 / procの下のファイルをチェックして、システムとチャットします。実行状態。 'cat / proc / loadavg'コマンドを使用してシステムの平均負荷を表示すると、出力は次のようになります。
0.27 0.36 0.37 4/83 4828 /
最初の3つの数値は、1、5、および15分の平均プロセス数として知られています(システム負荷のパーセンテージであると考える人もいますが、そうではありません。200以上の場合もあります。後者の2つ、1つの分子は実行中のプロセスの数、分母はプロセスの総数、もう1つは最後に実行されたプロセスID番号です。

第4に、一般的なコマンドのシステムの平均負荷を表示します
1、cat / proc / loadavg

2、稼働時間
名前:稼働時間
アクセス権:すべてのユーザー
使用方法:稼働時間[-V]
説明:稼働時間は、追加のパラメーターなしでユーザーに次の情報を提供します。
現在の時刻システムはこれまで稼働しています。接続されたユーザーの数システム負荷の最後の1分、5分、および15分
パラメータ:-Vバージョン情報を表示します。
例:稼働時間
結果は次のとおりです。
10:41 amアップ5日、10分、1ユーザー、負荷平均:0.00、0.00、1.99



3、セント
機能説明:現在システムにログインしているユーザー情報を表示します。
構文:w [-fhlsuV] [username]
追加の手順:このコマンドを実行すると、現在システムにログインしているユーザーと、実行しているプログラムがわかります。 wを個別に実行する
このコマンドはすべてのユーザーを表示します。また、ユーザー名を指定して、ユーザーに関する情報のみを表示することもできます。
パラメーター:
-fオンまたはオフにして、ユーザーがシステムにログインしている場所を表示します。
-h各フィールドのタイトル情報列を表示しません。
-lデフォルト値である詳細フォーマットリストを使用します。
-sユーザーのログイン時間、ジョブの終了フェーズで費やされたCPU時間、およびプログラムを表示しない簡潔な形式のリストを使用します。
-uエグゼキュータの名前とプログラムがCPU時間を消費するのにかかる時間を無視します。
-Vバージョン情報を表示します。
4、トップ
機能説明:実行中のプログラムを表示、管理します。
構文:top [bciqsS] [d] [n
追加の手順:topコマンドを実行して、システムで現在実行されているプログラムを表示し、それが提供する対話型インターフェースを介してホットキーでプログラムを管理します。
パラメーター:
bバッチモードを使用します。
cプログラムが一覧表示されると、命令名、パス、パラメータなど、各プログラムの完全な命令が表示されます。
dトップモニターの実行ステータスの間隔時間を秒単位で設定します。
i topコマンドを実行するときは、アイドル状態またはゾンビになったプログラムを無視してください。
n監視情報を更新する回数を設定します。
●プログラムの実行状況を継続的に監視します。
■プライバシーモードを使用して、インタラクティブモードで発生する可能性のある危機を排除します。
Sは、ps命令の「-S」パラメータに類似した累積モードを使用します。

5、tload
機能説明:システムの負荷状態を表示します。
構文:tload [-V] [-d] [-s] [端末番号]
注:tloadコマンドは、ASCII文字を使用してテキストモードでシステムのロードステータスを表示するだけです。端末番号が指定されていない場合、tloadコマンドを実行する端末に負荷状況が表示されます。
パラメーター:
-dtloadがシステム負荷を検出する間隔を秒単位で設定します。
-sグラフの垂直スケールサイズを列単位で設定します。
-Vバージョン情報を表示します。
上記の知識はあなたのために何かを得ることを望んでいます。