我知道这个问题https://stackoverflow.com/questions/41224738/how-to-calculate-system-memory-usage-from-proc-meminfo-like-htop 关于内存使用的答案似乎已经过时了,而且这个问题似乎更加复杂。
htop 现在肯定不再通过以下方式计算总内存 MemTotal - MemFree
。https://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
?