文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

赞成和反对为云实例设置交互空间的理由

2024-12-03 03:24

关注

【51CTO.com快译】许多Linux发行版(包括Red Hat)建议所有系统使用交换(swap)内存。然而,如果您看一下各种发行版的大多数云实例,会发现没有交换内存。

概况介绍

交换内存在大多数系统上作为磁盘上的一个分区而存在。分区后,管理员用mkswap格式化分区,用swapon启用它,内核立即看到可用的交换内存。没有可用分区的系统可使用交换文件,这是用mkswap格式化并启用的现有文件系统上的一个文件而已。

这两种方法都很好,但在分区上设置交换内存可带来更好的性能,因为您避免了现有分区上交换文件的开销。

系统RAM不足时,Linux可将内存页存储到交换空间中,避免进程杀死、系统崩溃。磁盘的速度比系统RAM慢得多,这降低了系统性能,直到系统RAM释放出来。如果内存使用量继续攀升到系统RAM和交换内存完全耗尽的地步,致命的内存不足(OOM)就会出现,并开始杀死进程,直到足够的RAM可用。

交换空间大小方面历来的建议是系统RAM大小的两倍。比如,为拥有1GB系统RAM的系统分配2GB的交换空间。该比率适用于较小的系统,无法适用于拥有数百GB系统 RAM的系统。

赞成为云设置交换空间的理由

微服务的兴起促使许多公司部署大量较小的实例。较小的实例随带较少的系统RAM,这增加了致命的OOM出现的风险:杀死进程,直到系统有足够的可用内存。

为这些系统添加交换空间在两个方面有帮助:

首先,进程可以在高负载期间从系统RAM临时转入到交换空间。管理员可从监控系统了解这些事件,他们有时间分析系统上发生这种情况的原因。万一内存泄漏,开发人员可以检查进程,在进程仍运行期间了解出了什么问题。这也可能表明:随着应用程序变庞大,管理员需要为它分配更大的实例。

其次,Linux内核会监视很少使用的内存页,并将它们发送到交换空间,以保留宝贵的系统RAM。sysctl设置vm.swappiness可控制内核将内存页发送到交换空间的愿望。这可以通过将最活跃的页留在系统RAM中,而将很少使用的页发送到交换内存来帮助云实例。

反对为云设置交换空间的理由

管理员禁止交换空间,因为他们可以自动用新的实例替换异常的实例。随着时间的推移,他们的监控指标显示因OOM导致应用程序下线而需要更换的实例有所增加。解决方案可能是更大的实例或进一步调查高负载下的内存泄漏。Systemd也会在可能的情况下快速重启这些进程。

在云实例上选择交换内存位置需要更全面的思考和规划。在物理服务器上,本地连接的非易失性内存快速(NVMe) 磁盘上的交换内存足够快,但是装有外部存储的云实例(比如AWS的弹性块存储即EBS)又如何?EBS上的性能取决于您选择哪种类型的EBS和系统上的邻居。系统出现RAM溢出时,远程存储系统上的交换内存可能导致实例性能欠佳。管理员可以选择RAM溢出时忽略交换内存并替换这些实例,而不是应对性能糟糕的处理请求的服务器。

最后,许多云实例成为Kubernetes和OpenShift集群的一部分,它们在处理交换内存时面临难题。关于适当处理交换内存,GitHub上有一个问题单

部署使用交换内存的云实例

如果您认为提供交换内存对应用程序有益,cloud-init 使您能够使用mounts模块在第一次启动时提供交换内存。只需为现有的cloud-config用户数据添加几行:

  1. swap: 
  2.     filename: /swapfile 
  3.     size: auto 
  4.     maxsize: 4294967296 

该配置告诉cloud-init在/swapfile创建一个自动大小(接近或小于4GB)的交换文件。自动交换大小的调整格式在cloud-init的源代码中:

  1. formulas = [ 
  2.     # < 1G: swap = double memory 
  3.     (1 * GB, lambda x: x * 2), 
  4.     # < 2G: swap = 2G 
  5.     (2 * GB, lambda x: 2 * GB), 
  6.     # < 4G: swap = memory 
  7.     (4 * GB, lambda x: x), 
  8.     # < 16G: 4G 
  9.     (16 * GB, lambda x: 4 * GB), 
  10.     # < 64G: 1/2 M up to max 
  11.     (64 * GB, lambda x: x / 2), 

Red Hat建议的交换大小略有不同:

您可以在cloud-config中用size:参数手动指定交换内存(以字节为单位)

  1. swap: 
  2.     filename: /swapfile 
  3.     size: 2147483648  # 2 GiB 

配置现有云实例上的交换内存

针对现有实例,交换文件常常是启用交换内存的最容易的方法。在该例中,将2GB交换文件放入到/swapfile中:

  1. # BTRFS only ################################################################# 
  2. # We must disable copy-on-write updates for swap files on btrfs file systems. 
  3. # The 'swapon' step fails if you skip these steps. 
  4. truncate -s 0 /swapfile 
  5. chattr +C /swapfile 
  6. # BTRFS only ################################################################# 
  7. # A 2 GiB swap file. 
  8. dd if=/dev/zero of=/swapfile bs=1MiB count=2048 
  9. Set the correct permissions on the swap file. 
  10. chmod 0600 /swapfile 
  11. # Format the swapfile. 
  12. mkswap /swapfile 
  13. # Enable the swapfile. 
  14. swapon /swapfile 
  15. Add it to /etc/fstab to enable it after reboot. 
  16. echo "/swapfile none swap defaults 0 0" >> /etc/fstab 

查看交换内存是否准备就绪:

  1. $ cat /proc/swaps 
  2. Filename        Type    Size      Used    Priority 
  3. /swapfile       file    2097148   0       -2 

原文Analyzing cases for and against setting swap space on cloud instances,作者:Major Hayden (Red Hat)

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

来源:51CTO内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯