我正在尝试计算 Linux 系统的所有交换内存使用量,并且我发现进程的所有交换使用量总和(使用下面的行计算)与输出之间存在free
差异meminfo
。
计算总交换使用量:
for file in /proc/*/status ; do grep VmSwap $file; done | grep kB | grep -v "0 kB"
似乎还有其他因素导致了掉期使用。
答案1
您至少错过了两个交换用户:
- tmpfs:任何已安装的 tmpfs 实例(通常至少为 /tmp 和 /run,可能还包括其他目录)均由交换空间支持。通常,tmpfs 中的数据位于内核的页缓存中。然而,当系统开始内存不足时,这些数据可能会被迫交换,以便保留数据,同时仍然为其他事情释放空间。据我所知,在计算交换使用量时,tmpfs 使用量不会计入任何进程(从实际角度来看,您不能将其计入任何进程,就像不能将任何给定文件计入特定进程一样)。 Hugetlbfs 实例也是如此(hugetlbfs 是一种特殊类型的 tmpfs)。
- 共享内存段:对于命名的 POSIX 共享内存段,数据最终存储在 /dev/shm 中,它本身就是一个 tmpfs 挂载点,属于上述 .对于匿名共享内存段,我相信(但我不确定,并且没有耐心或技能来尝试和测试)空间使用情况也不考虑到特定进程。
可能还有其他交换用户,但这是我确定的唯一两个非进程交换用户。