宿主机上开启了swap之后,容器也自然会使用swap。

但是容器使用swap之后会导致cgroup对容器做的内存限制失效,因为借助swap容器可以使用超过限制的内容。

linux有/proc/sys/vm/swappiness这个参数,当系统开启了swap空间之后。

  • 取值为100:使用PageCache和匿名内存(写入swap)优先级同等。
  • 取值为60(linux默认值):优先释放PageCache
  • 取值为0:不会禁止swap,空闲内存不足仍会将匿名内存写入swap。 可以看到值越小,使用swap的优先级越低。

cgroup的内存控制组下有memory.swappiness,将其设置为0,就算容器所在的节点开启了swap,本容器也会**停止(与前面系统的参数不同)**写入swap。可以用来将使用swap和不使用swap的容器部署在一个节点上。

不过意义不大,就像k8s的节点会禁用swap,那么根据不会有swap这个场景出现。