内存使用情况:`free -m` 和 htop 有很大差异,并且与 /proc/meminfo 相比,htop 中已用内存的计算也有很大差异。

内存使用情况:`free -m` 和 htop 有很大差异,并且与 /proc/meminfo 相比,htop 中已用内存的计算也有很大差异。

我知道这个问题https://stackoverflow.com/questions/41224738/how-to-calculate-system-memory-usage-from-proc-meminfo-like-htop 关于内存使用的答案似乎已经过时了,而且这个问题似乎更加复杂。

htop 现在肯定不再通过以下方式计算总内存 MemTotal - MemFreehttps://access.redhat.com/solutions/406773我找到了一个可行的解决方案。根据该解决方案,它将通过计算,MemTotal - MemFree - Buffers - Cached - Slab但这会导致与 htop 相比内存使用量太低。

htop 中的内存使用情况似乎非常相关,如free -m单元格中所示Mem: used

但是如果你创建一个 ramdisk,情况就会发生很大的变化:

mkdir mnt
sudo mount -t tmpfs none mnt
cd mnt 
sudo dd if=/dev/urandom of=test bs=32M status=progress

以上将创建一个占安装内存 50% 大小的 RAM 磁盘并填充此 RAM 磁盘。

htop 现在显示使用的物理 RAM 略多于一半,在测试用例中为 3.82 GB,使用了 7.44 GB。但是,free -m与创建和填充 RAM 磁盘之前为 102 MB 相比,仍然只显示使用了 104 MB。因此,使用 104 MB 肯定是错误的,因为一半的物理系统内存已由 RAM 磁盘使用,因此无法再使用。

RAM 磁盘的大小/proc/meminfo似乎包含在内Cached,因此在计算已用内存时不应减去缓存。

那么为什么 free -m 会报告如此错误的可用内存值?默认情况下,Debian 或 Ubuntu 等发行版上有各种 tmpfs,这意味着 free -m 会给出错误的可用内存印象。

htop 的内存计算看起来非常合理。那么 htop 的值是如何计算出来的呢/proc/meminfo

相关内容