htop 報告的記憶體使用量比 free 或 top 高得多
以下三個輸出基本上是同時進行的:
最佳:
top - 02:54:36 up 2 days, 13:50, 3 users, load average: 0.05, 0.05, 0.09 Tasks: 181 total, 1 running, 179 sleeping, 0 stopped, 1 zombie %Cpu(s): 2.5 us, 0.8 sy, 0.0 ni, 96.6 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 16158632 total, 11234480 used, 4924152 free, 844 buffers KiB Swap: 16777212 total, 0 used, 16777212 free, 10640832 cached
免費-h:
total used free shared buffers cached Mem: 15G 10G 4.7G 0B 844K 10G -/+ buffers/cache: 578M 14G Swap: 15G 0B 15G
頂部:
free 和 top 似乎都同意。頂部使用了 11234480 KiB,減去記憶體的 10640832 KiB 得到 579.7 MiB,這與使用 +/- 緩衝區/記憶體下的免費報告非常接近。
但是 htop 報告使用了 1836 (MiB),據我所知,它既不存在也不存在。這種差異從何而來?htop 顯然不包括記憶體的數據,但它仍然報告了 free 或 top 的三倍以上的記憶體使用量。
我知道有很多類似的問題,但我還沒有遇到解釋這種差異的問題(混淆通常似乎只是有/沒有記憶體計數)。
編輯:我應該提到我正在執行 openSUSE,並且我在 12.2 和 12.3 RC1 版本中都看到了同樣的差異。
Edit2:包含的 htop 版本是 1.0.1。我還從原始碼編譯了 1.0.2 版本,然後也看到了相同的差異。
完全重寫了我之前的文章。有點好奇並進一步檢查。
簡而言之:差異的原因是 openSUSE 使用了top和*free的更新檔版本,它為**`cached’*添加了一些額外的值。
A) 標準版
頂部,免費,htop,…:
通過從以下位置讀取數據來 計算使用情況
/proc/meminfo
:例如:
#free: Row Column | Corresponding /proc/meminfo entry -----|--------|---------------------------------- Mem: total : MemTotal used : MemTotal - MemFree free : MemFree shared : MemShared buffers : Buffers cached : Cached -----|--------|---------------------------------- -/+ buffers/cache: used : (MemTotal - MemFree) - (Buffers + Cached) free : MemFree + (Buffers + Cached) #htop: Used U* : ((MemTotal - MemFree) - (Buffers + Cached)) / 1024
*我正在使用
Used U
使用者模式使用的記憶體名稱。Aka Used 減號 (Cached + Buffers)。所以實際上使用相同的計算。
htop
在記憶體表中顯示以下內容:[Used U % of total | Buffers % of total | Cached % of total ] UsedU MB
(MB 實際上是 MiB。)
B) 更新檔版本
free
Debian、Fedora 、 openSuse 的基礎top
是procps-ng。但是,每種風味都添加了自己的更新檔,這些更新檔可能會或可能不會成為主項目的一部分。在 openSUSE 下,我們發現top/free (procps) 包的各種附加功能。這裡要注意的是一些用於表示記憶體值的附加值。(我沒有在我之前的文章中包含這些,因為我的系統使用“乾淨”的 procps。)
B.1) 補充
在 /proc/meminfo 我們有Slab,它是核心資料結構記憶體。作為一個子類別,我們發現SReclaimable它是 Slab 的一部分,可能會被核心和使用者模式回收用於其他用途。
此外,我們還有SwapCached,它是曾經被換出、被換入但也在交換文件中的記憶體。因此,如果需要再次更換它,這已經完成了。
最後是NFS_Unstable,它們是發送到伺服器但尚未送出到穩定儲存的頁面。
cache
在 openSUSE 更新檔版本中添加了以下值:SReclaimable SwapCached NFS_Unstable
(此外還有一些檢查,total 必須大於 free,used 必須大於 buffers + cache 等)
B.2) 結果
查看free,結果以下值是相同的:
total, used, free and buffers
.有以下變化:
cached and "+/- buffers"
。used = MemTotal - MemFree old: cached : Cached +-/buffers-used: used - (Buffers + Cached) +/-buffers-free: free + (Buffers + Cached) patched: cached : Cached + SReclaimable + SwapCached + NFS_Unstable +/-buffers-used: used - (Buffers + Cached + SReclaimable + SwapCached + NFS_Unstable) +/-buffers-free: free + (Buffers + Cached + SReclaimable + SwapCached + NFS_Unstable)
對top進行了相同的添加。
htop沒有改變,因此只與舊版本/或未修補版本的 top/free 對齊。