Qua*_*dom 9 memory top htop ram
以下三个输出基本上是同时进行的:
最佳:
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
Run Code Online (Sandbox Code Playgroud)
免费-h:
total used free shared buffers cached
Mem: 15G 10G 4.7G 0B 844K 10G
-/+ buffers/cache: 578M 14G
Swap: 15G 0B 15G
Run Code Online (Sandbox Code Playgroud)
顶:
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 版,然后也看到了相同的差异。
Run*_*ium 11
完全重写我之前的帖子。有点好奇并进一步检查。
简而言之:差异的原因是 openSUSE 使用了top和free的补丁版本,它为`cached'添加了一些额外的值。
顶部,免费,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
Run Code Online (Sandbox Code Playgroud)
*我使用Used U
用户模式使用的内存名称。又名使用减(缓存 + 缓冲区)。
所以实际上使用相同的计算。
htop
在内存表中显示以下内容:
[Used U % of total | Buffers % of total | Cached % of total ] UsedU MB
Run Code Online (Sandbox Code Playgroud)
(MB 实际上是 MiB。)
用于基础free
和top
在Debian,Fedora的,openSUSE的是是procps的-NG。但是,每种风格都会添加自己的补丁,这些补丁可能会或可能不会成为主要项目的一部分。
在 openSUSE 下,我们发现了 top/free (procps) 包的各种附加功能。这里要注意的是一些用于表示缓存值的附加值。(我没有在上一篇文章中包含这些内容,因为我的系统使用“干净”的 procps。)
在 /proc/meminfo 中,我们有Slab,它是内核数据结构缓存。作为一个子类别,我们发现SReclaimable它是 Slab 的一部分,可以被内核和用户模式回收用于其他用途。
此外,我们还有SwapCached,它是曾经被换出、换入但也在交换文件中的内存。因此,如果需要再次更换它,这已经完成了。
最后是NFS_Unstable,它是发送到服务器但尚未提交到稳定存储的页面。
cache
在 openSUSE 补丁版本中添加了以下值:
SReclaimable
SwapCached
NFS_Unstable
Run Code Online (Sandbox Code Playgroud)
(此外还有一些检查,total 必须大于 free,used 必须大于 buffers + cache 等)
查看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)
Run Code Online (Sandbox Code Playgroud)
对top进行相同的添加。
htop没有改变,因此只与旧的/或未打补丁的 top/free 版本保持一致。