10 | Swap:容器可以使用Swap空间吗?
该思维导图由 AI 生成,仅供参考
问题再现
- 深入了解
- 翻译
- 解释
- 总结
在容器中使用Swap空间是一个复杂的问题,本文深入探讨了这一话题。首先介绍了在设置了Memory Cgroup的容器中使用Swap空间可能引发的问题,并通过一个例子展示了在有Swap空间的节点上启动容器后,设置了Memory Cgroup限制后,容器可以正常运行而不会因内存不足而被杀死。文章还提到了Linux中的Swappiness概念,以及在容器中运行不同需求的程序可能会带来的冲突。此外,文章还介绍了如何在Memory Cgroup中使用memory.swappiness参数来控制匿名内存和page cache的回收,以及如何解决容器中不同程序对内存需求的冲突。通过深入讨论Swap空间的使用和内存回收机制,为读者提供了在实际场景中综合考虑Swap空间的使用的方法和思路。文章内容涵盖了技术细节,对于需要了解容器中Swap空间使用的读者具有一定的参考价值。
《容器实战高手课》,新⼈⾸单¥59
全部留言(15)
- 最新
- 精选
- 伟平k8s下容器貌似不能用swap
作者回复: kubelet缺省不能在打开swap的节点上运行。 配置“failSwapOn: false”参数,kubelet可以在swap enabled的节点上运行。
2020-12-07219 - 莫名Memory Cgroup 参数 memory.swappiness 起到局部控制的作用,前提是节点开启了 swap 功能,不然无论如何设置都无济于事。
作者回复: @莫名, 没错
2020-12-0710 - Khirye想问下老师,对于最近k8s宣布放弃docker有什么看法?
作者回复: 对于k8s来说,的确没有必要再用docker了。 这是我们组之前做的从docker切换到containerd的技术分享: https://www.infoq.cn/article/odslclsjvo8bnx*mbrbk
2020-12-1128 - kimoti既然memory.swappiness设置为0了,Swap分区是不会有数据写入的。
作者回复: @kimoti 是的
2020-12-0728 - po老师,文章中你说的这两句话好像是矛盾的,swappiness设置为0的时候,到底会不会回收匿名内存呢? 1. 不过,这里有一点不同,需要你留意:当 memory.swappiness = 0 的时候,对匿名页的回收是始终禁止的,也就是始终都不会使用 Swap 空间。这时 Linux 系统不会再去比较 free 内存和 zone 里的 high water mark 的值,再决定一个 Memory Cgroup 中的匿名内存要不要回收了。请你注意,当我们设置了"memory.swappiness=0 时,在 Memory Cgroup 中的进程,就不会再使用 Swap 空间,知道这一点很重要. 2. 值为 0 的时候,当系统中空闲内存低于一个临界值的时候,仍然会释放匿名内存并把页面写入 Swap 空间。
作者回复: 1. memory.swappiness 是指cgroup中的参数 2. 这里说的是/proc/sys/vm/swappiness
2020-12-1542 - haha所以对于开启了swap,且swap空间够大的前提下,goup的mem limit没用咯?
作者回复: 是的, 如果只是设置 memory.limit_in_bytes
2020-12-152 - Geek4329感谢老师的分享,学习的越多,越感到自己的自信😼 学完这个课程,并完全吸收的话,是不是可以说自己接近精通容器技术了😁
作者回复: @Geek4329 很高兴我的分享对你有帮助!
2020-12-072 - chong chong老师,k8s pod默认的memory.swappiness 值是60,如何设置才能使得默认是0呢?
作者回复: 可以修改kube代码
2021-05-111 - 谢哈哈已经设置memory.swappiness参数,全局参数swappiness参数失效,那么容器里就不能使用swap了
作者回复: @谢哈哈 是的
2020-12-071 - 刘宏请问一下在容器里如何加快page cache的释放速度,原因是发现scp的时候,page cache会很快将内存占满,速度会骤然下降,drop cache以后,速度能显著提升;配置了vm.vfs_cache_pressure为1w,依旧在容器里没改善2021-10-0311