当 RAM 充满缓存时,为什么我的系统要使用交换区?

当 RAM 充满缓存时,为什么我的系统要使用交换区?

我正在运行 openSUSE TW、32 GiB RAM、64 GiB 交换 (SSD)。

在 RAM 完全被缓存填满之前,交换空间的使用量为零。

我正在使用 htop 来监控它。黄色/橙色 = 缓存

我的系统将使用 2 GiB 的 RAM,但其余的(30 GiB)都是缓存,然后,不是在需要时丢弃一些缓存来为其他数据腾出空间 - 它开始使用交换,只有几个 MiB,但我我发誓我会注意到轻微的冻结,并且系统有时会明显变慢。

这是为什么?我能做什么?

我愿意提供任何要求的信息。


vmstat 60 5 vmstat 60 5

vm.swappiness = 1
vm.dirty_ratio = 20
vm.dirty_background_ratio = 10

答案1

你可以将 swappiness 设置为 0。Linux 文档说:

“此控制用于定义内核交换内存页面的积极性(原文如此)。较高的值将增加积极性,较低的值会减少交换量。0 值指示内核不要启动交换,直到空闲量和文件支持的页面小于区域中的高水位线。

默认值为 60。”

请注意,将 swappiness 设置为 0 并不能完全消除交换,它仍然会在条件下进行交换。

但交换有问题吗?我认为,只是一些几乎不使用的换出页面值得换出。要查看交换是否存在问题,请运行vmstat 60一段时间并查看siso列。您可能会发现它们大多数时候都是 0。另外,您的专栏swpd可能不会有太大变化。这意味着交换不是问题。

swapoff您是否有足够的内存来完成您正在做的事情,并且出于某种特殊的原因(交换空间),您绝对不想使用交换空间。

请注意,如果使用这些参数导致系统冻结,则不太可能是由交换引起的。当然,除非输出中的四列sisovmstat很高。

- 编辑 -

您的vmstat输出表明有几页被换出。这并不是什么值得担心的事情;没有发生大的交换。当然不足以导致系统冻结。

相关内容