即使20GB可用内存使用交换,swappiness = 0

我们有一台CentOS 7服务器,尽pipe有大于20GB的可用内存,swappiness被设置为0,但一周可以进行一次交换。我们希望能够使用swap作为我们正在运行的一种标记内存不足,无需担心触发OOM杀手。

还有什么可能导致系统进入交换,除了swappiness,我们可以做些什么来防止它交换?

交换并不表示您的内存不足。 这表明内存页面正在移动。

当为了各种目的而移动内存区域时(例如碎片整理,空闲页面卸载或者其他types的优化),最简单和最有效的方法是将其放入交换中,然后重新分配到主内存当(或通常在之前)它实际上是需要的。 这个过程可能会被某些应用程序迫使在内部解决问题,例如极度的内存碎片。 这将发生,尽pipe你的swappiness设置。

将swappiness设置为零只能确保不是主动发送空闲页面进行交换,而是在关键的OOM事件中一次性发送所有内容。 Swap通常不能够快速写入来解决这个问题,然后OOMkiller开始并开始拍摄过程。 它使用的逻辑有些激进,如果事情很繁忙,最终可能会试图终止init。

因此,不pipe提高性能如何,这将确保您的机器在内存不足的情况下崩溃(即使几乎所有闲置页面都无所事事),而不pipe您实际拥有多less交换空间。 这也会增加内存碎片,降低许多场景下的性能和稳定性。

如果你不想让机器交换或翻页,不要把交换机放在上面。 在大多数情况下这是一个糟糕的主意,但可以适用于无盘系统和一些虚拟化工作负载。

如果要限制在系统中交换以潜在地减less应用程序延迟,请将swappiness设置为大约10.这适用于具有过多内存的系统(如您的系统)。

如果你想知道你的机器是否内存不足,请指出一些实际的监控。

只是因为你有交换分配并不意味着交换IN / OUT正在发生。 检查vmstat以查看是否正在进行交换。 而且由于你的swappiness被设置为0,所以它更可能是一个空的交换。

查看si值, sovmstat实用程序中input/输出。