“頂部”輸出中的“平均負載”如何解釋?所有發行版都一樣嗎?
我想知道基於 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% 載入?
文件來源和版本:
- 第一個明星與
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 top
inRHEL
或 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 負載是如何解釋的?
從以下答案中給出的資訊中,除了一些個人搜尋之外,我發現:
top
我正在使用的包含在包 procps-3.2.8 中。可以使用top -v
.- 在我從官方網站下載的版本中
procps-3.2.8
,該工具似乎直接uptime
從procfs
文件中獲取資訊/proc/loadavg
(不使用 linux 功能getloadavg()
)。- 現在對於
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 或更多的)。
Linux
top
實用程序從核心獲取負載值,然後將它們寫入/proc/loadavg
. 查看 的來源procps-3.2.8
,我們看到:
- 為了顯示負載平均值,該
sprint_uptime()
函式在 中呼叫top.c
。- 此函式存在
proc/whattime.c
並呼叫loadavg()
.proc/sysinfo.c
- 該功能只是打開
LOADAVG_FILE
以讀取負載平均值。LOADAVG_FILE
之前定義為"/proc/loadavg"
。