交换空间已满,但进程几乎不使用任何交换空间

交换空间已满,但进程几乎不使用任何交换空间

我有一个 Debian VM,大约一天后(但有时更快)所有交换空间都会用完(因此 zabbix 纠缠着我)。我设置swappiness0,但它仍然这样做,尽管可能慢一点。

最有趣的是,如果我列出进程的交换使用情况(按顶部或按脚本) 并将它们加起来,我只得到大约 55MB,而不是报告中使用的 1022MB free

将各个进程交换使用量相加后的交换使用量与报告的总交换使用量之间的差异可能是什么原因造成的?

操作系统:Debian 10.11
Linux:4.19.0-18-amd64

答案1

top的交换使用估计和/procVmSwap字段(链接脚本使用的字段)非常不可靠。

为了对实际交换使用情况有一个合理的估计,您需要查看/proc/…/smapssmem可以为你做到这一点,例如

sudo smem -s swap -r|head

将显示排名靠前的交换用户,以及

sudo smem -t

将在底部的摘要行中显示分配的总交换量(由 计算smaps)。

请注意,这也可能不准确,但它应该会给出更好的结果。交换可以被多次计算,在这种情况下,它在摘要行中被过度计算,并且交换中的某些内容显然没有分配给单个进程(例如交换出tmpfs),在这种情况下它被低估了。

相关内容