Rhel

“頂部”輸出中的“平均負載”如何解釋?所有發行版都一樣嗎?

  • June 22, 2020

我想知道基於 Red-Hat 的 linux 的輸出是否可以被基於 Debian 的 linux 不同地解釋。

為了使問題更加具體,我所追求的是了解如何top解釋 Red-Hat 系統上命令第一行的“平均負載”以及如何通過官方文件 ro 程式碼來驗證這一點。

$$ There are many ways to approach this subject, all of which are acceptable answers to the question $$

一種可能的方法是查找此資訊的正式記錄位置。

另一種方法是查找在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. 第二個開始於

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 topinRHEL或 in看到online ubuntu documentation,它對輸出格式沒有任何解釋(也沒有關於我感興趣的平均負載)。

第二,包含一個簡短的解釋,指出負載平均值與最後 1 分鐘有關,但與它的值的解釋無關!

我直接引用第二個來源:

2a. 正常執行時間和平均負載

這部分由單行組成,其中包含:

程序或視窗名稱,取決於顯示模式

目前時間和自上次啟動以來的時間長度

使用者總數

過去 1、5 和 15 分鐘的系統負載平均值

所以,如果這個解釋確實是正確的,那麼理解負載平均值大約是最後 1 分鐘就足夠了。
但它沒有解釋數字的格式。

第三個解釋中,它說:

當指定負載平均值的數字時,它們應該乘以 100。

這種解釋表明 0.02 表示 2% 而不是 0.02%。但這是正確的嗎?此外,它是否適用於所有 linux 發行版以及可能的不同實現top

為了找到這個問題的答案,我嘗試通過線上搜尋來瀏覽程式碼。但我發現,至少有兩個top與 RHEL 相關的不同版本!和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,該工具似乎直接uptimeprocfs文件中獲取資訊/proc/loadavg(不使用 linux 功能getloadavg())。
  3. 現在對於top命令它也沒有使用該功能getloadavg()。我設法驗證top它確實與uptime顯示負載平均值的工具執行相同的操作。它實際上呼叫了該工具的函式,該函式從文件uptime中獲取其資訊。 所以,一切都指向文件!因此,要準確理解生成的,必須閱讀核心程式碼以了解文件是如何編寫的。procfs``/proc/loadavg

/proc/loadavg``load average``top``loadavg

在其中一個答案中還指出了一篇出色的文章,它提供了對 的三個值的外行術語解釋loadavg

因此,儘管事實上所有答案都同樣有用和有幫助,但我將把指向文章 http://www.linuxjournal.com//article/9001的答案標記為我的問題的“答案”。感謝大家的貢獻!

此外,從“了解頂部和平均負載”問題中,我找到了指向核心原始碼的連結,該連結指向loadavg計算的位置。似乎有一個巨大的註釋解釋它的工作方式,這部分程式碼也在C

程式碼的連結是http://lxr.free-electrons.com/source/kernel/sched/loadavg.c

我也不想參與任何形式的剽竊,我只是為了完整性而添加這個。所以,我重複一遍,核心程式碼的連結是從Understanding top and load average中的一個答案中找到的。

CPU負載是執行隊列的長度,即等待執行的程序隊列的長度。

uptime命令可用於查看執行隊列在最後一分鐘、最後五分鐘和最後 15 分鐘內的平均長度,就像通常顯示的一樣top

高負載值意味著執行隊列很長。低值意味著它很短。因此,如果一分鐘的平均負載為 0.05,則意味著在那一分鐘內平均有 0.05 個程序在執行隊列中等待執行。它不是一個百分比。這是,AFAIK,在所有 Unices 上都是一樣的(儘管有些 Unices 可能不會計算等待 I/O 的程序,我認為 Linux 會這樣做;OpenBSD 僅在一段時間內也計算核心執行緒,因此負載始終為 1 或更多的)。

Linuxtop實用程序從核心獲取負載值,然後將它們寫入/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"

引用自:https://unix.stackexchange.com/questions/303699