以下三项产出基本上是同时获得的:
顶部:
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 版本,然后也看到了相同的差异。
答案1
完全重写我之前的帖子。有点好奇并进一步查看。
简而言之:造成差异的原因是 openSUSE 使用了修补版本顶部和自由的这增加了一些额外的价值‘缓存’。
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
用户模式使用的内存名称。阿卡使用减去(缓存+缓冲区)。
所以实际上使用相同的计算。
htop
在内存仪表中显示以下内容:
[Used U % of total | Buffers % of total | Cached % of total ] UsedU MB
(MB 实际上是 MiB。)
B) 补丁版本
free
Debian 、Fedora、openSuse 的基础top
是procps-ng。然而,每种风格都会添加自己的补丁,这些补丁可能会或可能不会成为主项目的一部分。
在 openSUSE 下我们发现顶级/免费(procps)包的各种添加。这里需要注意的是一些用于表示缓存值的附加值。(我没有在上一篇文章中包含这些,因为我的系统使用“干净”的过程。)
B.1) 补充
在 /proc/meminfo 中我们有板坯这是内核数据结构缓存。作为一个子类别,我们发现S可回收它是 Slab 的一部分,可以被内核和用户模式回收以供其他用途。
进一步我们有交换缓存这是曾经被换出的内存,被换入但也在交换文件中。因此,如果需要再次更换它,这已经完成了。
最后还有NFS_不稳定这是发送到服务器但尚未提交到稳定存储的页面。
cache
openSUSE 补丁版本中添加了以下值:
SReclaimable
SwapCached
NFS_Unstable
(此外还有一些检查,总数必须大于空闲,已用必须大于缓冲区+缓存等。)
B.2) 结果
看着自由的,因此以下值相同:
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)
进行相同的添加顶部。
顶部没有改变,因此仅与旧的/或未修补的顶级/免费版本保持一致。