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

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

Red-HatベースのLinuxの出力がDebianベースのLinuxで別々に解釈できるかどうか疑問に思います。

質問をより具体的にするために私が求めているのは、topRed-Hatシステムコマンドの最初の行にある「負荷平均」を解釈する方法と、公式文書のroコードを使用してこれを確認する方法を理解することです。

[このトピックにアクセスするにはいくつかの方法があり、すべて質問に対する回答として受け入れられます。]

可能なアプローチの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

これ最初man topRHEL1 つは in または in でわかるように、online ubuntu documentation出力形式の説明はありません。負荷平均)に興味があります。

これ第二1つは、負荷平均が過去1分に関連しているという簡単な説明が含まれていますが、その値は説明されていません!

2番目のソースを直接引用しています。

2a稼働時間と負荷平均
このセクションは、以下を含む単一行で構成されています。
表示モードに応じたプログラムまたはウィンドウ名、
現在時刻、および前回のブート後の
時間

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

内部に第三説明すると、次のようになります。

負荷平均値を指定するときは、100を掛ける必要があります。

この説明は、0.02が0.02%ではなく2%を意味することを示しています。しかし、これは正しいですか?また、すべてのLinuxディストリビューションとは異なる実装にも適用されますかtop
この質問に対する答えを見つけるためにオンラインで検索してコードを探してみました。しかし、topRHELに関連するバージョンが2つ以上あることがわかりました!そしてbuiltin-top.c再建top.c。コードの冒頭のお知らせに記載されているように、両方ともRed-Hatの著作権で保護されているため、RHELがそのうちの1つを使用することは論理的なようです。
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. 公式ウェブサイトからダウンロードしたバージョンでは、このツールは(Linux機能を利用せずに)ファイルから直接情報を取得するprocps-3.2.8ようです。uptimeprocfs/proc/loadavggetloadavg()
  3. このtopコマンドはその機能も使用しませんgetloadavg()。私はこれが実際に負荷平均を表示するツールとtop同じことをすることを確認しました。実際にファイルから情報を取得するuptimeツールの機能を呼び出します。uptimeしたがって、すべてがファイルを指しています!したがって、生成されたファイルを正確に理解するためには、カーネルコードを読んでファイルがどのように作成されるかを理解する必要があります。procfs/proc/loadavg

    /proc/loadavgload averagetoploadavg

答えの1つには、3つの価値を理解しやすく説明する素晴らしい記事もありますloadavg
したがって、すべての回答が同じように便利で役に立ちますが、その記事に対する回答を表示します。 http://www.linuxjournal.com//article/9001私の質問に対する「答え」として。お寄せいただきありがとうございます!

また、質問で最高および平均負荷の理解loadavg、計算位置を指すカーネルソースコードへのリンクを見つけました。なぜなら、それがどのように機能するのかを説明する巨大なコメントがあるようです。そしてコードのこの部分も同じですC
コードへのリンクは次のとおりです。http://lxr.free-electrons.com/source/kernel/sched/loadavg.c
もう一度申し上げますが、私はいかなる形の盗作もしたくありません。完全性のためにこの内容を追加するだけです。繰り返します。カーネルコードへのリンクは、以下のいずれかの回答で見つけました。最高および平均負荷の理解

答え1

CPUロードは、実行キューの長さ、つまり実行を待つプロセスキューの長さです。

このuptimeコマンドを使用すると、通常表示される最後の1分、最後の5分、最後の15分の実行キューの平均長を表示できますtop

ロード値が高いとは、実行キューが長いことを意味します。値が低いとは、長さが短いことを意味します。したがって、1分の負荷平均が0.05の場合、その1分間に実行キューに実行待機中のプロセスが平均0.05個あったことを意味します。それはパーセンテージではありません。 AFAIK、これはすべてのUnicesで同じです(一部はI / Oを待つプロセスを計算するわけではありませんが、Linuxはそうだと思います。OpenBSDもしばらくカーネルスレッドのみを計算するため、ロードは常に1以上です)。

Linuxtopユーティリティはカーネルからロード値を取得して書き込みます/proc/loadavg。確認するprocps-3.2.8、私達は見た:

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

答え2

負荷平均は通常コアによって計算されます。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は、サンプル期間(1、5、15分)の間に実行キューに平均3.4のプロセスがあったことを意味します。

ただし、負荷平均が高いとは必ずしもサーバーに過負荷がかかったという意味ではありません。コアが16個の場合、負荷平均はストレスなしで16になります。さらに、多数のアプリケーション呼び出しが発生する可能性があり、fork()これにより多数のプロセスが作成/削除され、負荷平均が高くなりますが、サーバーのパフォーマンスに大きな影響を与えない可能性があります。 %CPU Busyなどの他の指標と一緒にガイドとしてのみ使用してください。

答え3

ロード平均は、特定のツールやディストリビューションに固有のものではなく、カーネルまたはより正確にはスケジューラによって提供されるメジャーであるため、デプロイメントに依存しないメジャーです。測定結果はprocファイルシステムに記録されます。/proc

解釈によると、負荷平均指標は次のとおりです。いいえCPUの動作強度と実行する作業量を示します。実行可能または中断できない状態のプロセス数を直接測定するので、実際にこれを掛ける必要はないと思います。

詳細については、次のgetloadavg(3)2つのマニュアルページをご覧ください。uptime

負荷平均指標は最初は理解しにくい概念である可能性があり、多くの人がこれがCPUがどれほど懸命に機能しているかを示すと思いますが、実際にはそうではありません。

関連情報