「負荷平均」は「トップ」出力でどのように解釈されますか?すべてのディストリビューションで同じですか?


12

Red-HatベースのLinuxの出力が、DebianベースのLinuxによって異なる解釈ができるかどうか知りたいのですが。

質問をさらに具体的にするために、私が求めているのはtop、Red-Hatシステムのコマンドの最初の行からの「平均負荷」がどのように解釈され、公式のドキュメントroコードによってこれを検証するかを理解することです。

[この主題にアプローチするには多くの方法があり、そのすべてが質問に対する許容可能な答えです]

潜在的なアプローチの1つは、この情報が公式に文書化されている場所を見つけることです。
もう1つは、top私が取り組んでいる特定のディストリビューションとバージョンからビルドされたコードバージョンを見つけることです。

私が得ているコマンド出力は次のとおりです。

    top - 13:08:34 up  1:19,  2 users,  load average: 0.02, 0.00, 0.00
    Tasks: 183 total,   1 running, 182 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.2%us,  0.2%sy,  0.0%ni, 96.8%id,  2.7%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   3922520k total,   788956k used,  3133564k free,   120720k buffers
    Swap:  2097148k total,        0k used,  2097148k free,   344216k cached


この場合、負荷平均値をどのように解釈できますか?
あるドキュメントソースからの平均負荷がぎりぎりであり、別のドキュメントソースで100を乗算した後に解釈する必要があることを確認できました。
したがって、問題は
、0.02%と2%のどちらがロードされているかです。
ドキュメントのソースとバージョン:

1)最初の星は

    TOP(1)                        Linux User’s Manual                       TOP(1)

    NAME
           top - display Linux tasks

出典:man top私のRedHatディストリビュー
ションのUbuntuにも、「タスク」を備えたバージョンがあり、負荷平均を説明していません。http
//manpages.ubuntu.com/manpages/precise/man1/top.1.html

2)2つ目は

    TOP(1)                          User Commands                         TOP(1)

   NAME         top

   top - display Linux processes

出典:http :
//man7.org/linux/man-pages/man1/top.1.htm

3)これは次で始まります:

   TOP(1)

   NAME

   top - display and update information about the top cpu processes

出典:http://www.unixtop.org/man.shtml 最初の一つは、見ることができるでまたはであり、それは、出力形式のいずれかの説明がありません(も程度の負荷平均私が興味を持っています) 。第二 1は、負荷平均が最後の1分に関係していることを指摘し、簡単な説明が含まれていないが、その値の解釈については何も!

man topRHELonline ubuntu documentation


私は2番目の情報源から直接引用します:

2a。UPTIMEとLOADの平均
この部分は、
プログラムまたはウィンドウの名前を含む1行で構成されます。表示モードの
現在の時間と、最後のブートからの時間、最後の1、5、15分間の システム負荷平均の
合計
時間

したがって、この説明が本当に正しい場合は、負荷平均が最後の1分間であることを理解するだけで十分です。
ただし、数値の形式については説明していません。

では第三の説明、それはそれを言います:

負荷平均の数値を指定する場合は、100を掛ける必要があります。

この説明は、0.02が0.02%ではなく2%を意味することを示唆しています。しかし、これは正しいですか?さらに、それはLinuxのすべてのディストリビューションおよび潜在的に異なる実装に適切topですか?
この質問に対する答えを見つけるために、コードをオンラインで検索してコードを調べました。しかし、私は、topRHEL に関連する少なくとも2つの異なるバージョンを見つけました!builtin-top.cそしてリファクタリングtop.c。どちらもRed-Hatが著作権を所有しており、コードの冒頭にある告知にあるとおり、RHELがこれらのいずれかを使用しているのは当然のようです。
http://lxr.free-electrons.com/source/tools/perf/builtin-top.c
http://lxr.free-electrons.com/source/tools/perf/util/top.c

それで、その多くのコードを掘り下げる前に、CPU負荷がどのように解釈されるかについて正確な理解を形成するためにどこに集中すべきかについての意見が必要でしたか?

以下の回答で与えられた情報からは、いくつかの個人の検索に加えて、私がいることを発見した:

1 - top私が使用しているということは、パッケージのprocps-3.2.8に含まれています。を使用して確認できますtop -v
2- procps-3.2.8公式Webサイトからダウンロードしたバージョンでは、ツールuptimeprocfsファイルから/proc/loadavg直接情報を取得しているようです(Linux関数を利用していませんgetloadavg())。
3- topコマンドでは、関数も使用しませんgetloadavg()。私は何とかtop実際に同じことを確認することができましたuptime負荷平均を表示するツール。実際にはuptimeprocfsファイルから情報を取得するツールの関数を呼び出します/proc/loadavg

だから、すべてが/proc/loadavgファイルを指しています!したがって、load averageによって生成されたものを正確に理解するにはtop、カーネルコードを読み取って、ファイルのloadavg記述方法を確認する必要があります。
また、回答の1つで指摘された優れた記事で、の3つの値についての素人の用語説明が提供されていますloadavg
したがって、すべての回答が等しく有用で役立つという事実にもかかわらず、私は記事http://www.linuxjournal.com//article/9001を指し示したものを私の質問への「the」回答としてマークするつもりです 。あなたの貢献に感謝します!

さらに、「トップと負荷平均を理解する」の質問から、loadavg計算される場所を指すカーネルのソースコードへのリンクが見つかりました。動作方法を説明する巨大なコメントがあるように、コードのこの部分もにありますC
コードへのリンクはhttp://lxr.free-electrons.com/source/kernel/sched/loadavg.cです。
繰り返しますが、私はいかなる形の盗用にも従事しようとはしていません。完全性のためにこれを追加しています。したがって、カーネルコードへのリンクがトップと負荷平均の理解の答えの1つから見つかったことを繰り返します...


バージョンから何がわかりますか?(top -v
Fiximan

上:procpsバージョン3.2.8
Angelos Asonitis

回答:


19

CPU負荷は、実行キューの長さ、つまり実行を待機しているプロセスのキューの長さです。

このuptimeコマンドを使用すると、直前の1分間、過去5分間、および過去15分間の実行キューの平均長を確認できますtop

高い負荷値は、実行キューが長いことを意味します。低い値は、それが短いことを意味します。したがって、1分の負荷平均が0.05の場合、その1分間の平均で、実行キューで実行を待機しているプロセスが0.05プロセスあったことを意味します。パーセンテージではありません。これはAFAIKであり、すべてのUnicesで同じです(ただし、一部のUnicesは、I / Oを待機しているプロセスをカウントしない場合があります。もっと)。

Linux topユーティリティはカーネルからロード値を取得し、カーネルがそれらに書き込みます/proc/loadavg。のソースprocps-3.2.8を見ると、次のことがわかります。

  1. 負荷平均を表示するには、sprint_uptime()関数をで呼び出しtop.cます。
  2. この関数は、に住んでいるproc/whattime.cし、呼び出すloadavg()proc/sysinfo.c
  3. この関数LOADAVG_FILEは、負荷平均を読み取るために開くだけです。
  4. LOADAVG_FILEは以前にとして定義されてい"/proc/loadavg"ます。

回答ありがとうございます。これは公式にどこかに文書化されていますか?
Angelos Asonitis

1
@AgelosAssonitis 2006年のこのLinuxJournalの記事は興味深いかもしれません。Linux Kernelソースツリー内のいくつかのソースファイルを参照します。私はLinuxユーザーではないので、これらのファイルがカーネルの最新の化身にまだ存在するかどうかはわかりません。linuxjournal.com
article

確かに面白い記事!私はprocpsパッケージを調べて、実際にtopコマンドが/ proc / loadavgファイルからその値を取得しているかどうか、およびこれがgetloadavg()関数の結果と同じかどうかを確認しています。
Angelos Asonitis

@AgelosAssonitis負荷平均のドキュメント化の明確な場所は、カーネルソースツリーです。POSIXはCPU負荷が何であるかを定義せず、「負荷平均」という言葉をどこにも言及していません。ユーティリティは、POSIXユーティリティではなく、ライブラリの関数も(それはしかしBSD系統を持っている)POSIXで定義されていません。topuptimegetloadavg()
クサラナンダ

だから、私が収集したものから、カーネルソース自体以外のこれらの値の形成を理解する公式文書はありません、それは正しいですか?しかし、そこに到達する前topに、procfsファイルのloadavgに提示された値を関連付ける必要があります...
Angelos Asonitis

7

負荷平均は通常、カーネルによって計算されます。topやなどのアプリケーションuptimeは、getloadavg(3)ライブラリコールを使用してこれにアクセスする場合があります(異なるUnixバージョン間での移植を目的としています)。Linuxでは通常、これによりからの読み取りが行われ/proc/loadavgます。FreeBSDでは、システムコールです。

例えば:

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

int main()
{
  double ld[3];

  int i=getloadavg(ld,3);
  printf("Load %.2f %.2f %.2f\n",ld[0],ld[1],ld[2]);
}

uptimeそして、topの両方が彼らのデータを取得するために、同様の呼び出しを行います。

現在、1/5/15分の負荷平均は、実行キュー上のプロセスの数です。異なるオペレーティングシステムでは、これを異なる方法で計算する場合があります。最大の違いは通常、I / Oを待機しているプロセス(ディスク上でブロックされているなど)が実行可能としてカウントされるかどうかです。Linuxではそうです。

したがって、負荷平均3.4は、サンプルウィンドウ内の実行キューに平均3.4プロセスがあったことを意味します(1、5、15分)。

ただし、平均負荷が高くても、サーバーが過負荷になっているとは限りません。16コアの場合、負荷平均はストレスなしで16になります。また、多数のアプリケーションfork()呼び出しが発生する可能性があり、その結果、多数のプロセスが作成または破棄され、平均負荷が高くなりますが、サーバーのパフォーマンスに大きな影響を与えることはありません。%CPUビジーなどの他のメトリックと共に、ガイドとしてのみ使用する必要があります。


4

負荷平均は、特定のツールや分布に固有のものではなく、カーネルによって提供される測定値であり、正確にはスケジューラーであり、したがって、分布に依存しない測定値です。測定値はprocファイルシステム内に記録されます/proc

その解釈に加えて、負荷平均メトリックは、CPUがどれだけハードに動作しているかを示すものではなく、実行する必要がある作業量を示しています。これは、実行可能な状態または中断できない状態のプロセス数を直接測定するものであるため、実際には何を掛ける必要はないと思います。

次の二つのmanページをチェックしてみてください。getloadavg(3)そしてuptimeより多くの情報のため。

負荷平均メトリックは、最初は理解するのが難しい概念である可能性があります。多くの人々は、それがCPUがどれほどハードに動作しているかを示すものであると考えていると思いますが、実際はそうではありません。


1
わかりましたが、getloadavg()関数の説明で説明されている負荷平均はtop、rhel のコマンドが示す負荷平均と同じであることを絶対に確信していますか?パッケージprocps-3.2.8(コマンドで示されていますtop -v)の非タール化されたコンテンツで全文検索を実行し、関数getloadavg()の単一の言及がないため、これを求めています!だから、おそらくトップ計算異なる方法で平均負荷....
アンゲロスAsonitis
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.