当前位置: 首页 > 科技观察

云实例交互空间的优缺点

时间:2023-03-14 12:22:25 科技观察

【.com快译】很多Linux发行版(包括RedHat)都推荐所有系统都使用交换(swap)内存。但是,如果您查看各种发行版的大多数云实例,就会发现没有交换内存。情况说明书交换内存作为磁盘上的一个分区存在于大多数系统中。分区后,管理员用mkswap格式化分区,用swapon启用它,内核立即看到可用的交换内存。没有空闲分区的系统可以使用交换文件,它只是现有文件系统上使用mkswap格式化和启用的文件。两者都很好,但是在分区上设置交换内存可以提供更好的性能,因为您避免了现有分区上交换文件的开销。当系统内存不足时,Linux可以将内存页存放在交换空间中,避免进程被杀和系统崩溃。磁盘比系统RAM慢得多,这会降低系统性能,直到系统RAM被释放。如果内存使用率继续攀升到系统RAM和交换内存完全耗尽的程度,则会发生致命的内存不足(OOM)并开始终止进程??,直到有足够的RAM可用为止。交换大小的历史建议是系统RAM大小的两倍。例如,为具有1GB系统RAM的系统分配2GB的交换空间。此比率适用于较小的系统,不适用于具有数百GB系统RAM的系统。支持为云提供交换空间的论点微服务的兴起促使许多公司部署大量较小的实例。较小的实例具有较少的系统RAM,这会增加致命OOM的风险:杀死进程直到系统有足够的可用内存。向这些系统添加交换空间有两个帮助:首先,进程可以在高负载期间临时从系统RAM转移到交换空间。管理员通过监控系统了解这些事件,他们有时间分析为什么会在系统上发生这种情况。如果发生内存泄漏,开发人员可以在进程仍在运行时检查进程以查看出了什么问题。它还可能表明,随着应用程序变得越来越大,管理员需要为其分配更大的实例。其次,Linux内核监控很少使用的内存页面并将它们发送到交换空间以保留宝贵的系统RAM。sysctl设置vm.swappiness控制内核将内存页面发送到交换空间的愿望。这可以通过将最活跃的页面留在系统RAM中,同时将很少使用的页面发送到交换内存来帮助云实例。反对为云设置交换空间的论点管理员禁止交换空间,因为它们可以自动用新实例替换行为不当的实例。随着时间的推移,他们的监控指标显示由于OOM使应用程序脱机而需要更换的实例有所增加。解决方案可能是更大的实例或进一步调查高负载下的内存泄漏。Systemd还会在可能的情况下快速重启这些进程。在云实例上选择交换内存位置需要更多的思考和规划。在物理服务器上,本地连接的Non-VolatileMemoryExpress(NVMe)磁盘上的交换内存足够快,但是具有外部存储(例如AWS的ElasticBlockStorage或EBS)的云实例呢?EBS上的性能取决于您选择的EBS类型和系统上的邻居。当系统RAM溢出时,远程存储系统上的交换内存会导致实例性能不佳。管理员可以选择忽略交换内存并在RAM溢出时替换那些实例,而不是处理性能不佳的服务器处理请求。最后,许多属于Kubernetes和OpenShift集群的云实例在处理交换内存时面临困难。GitHub上有一张关于正确处理交换内存的问题单。部署使用交换内存的云实例如果您认为提供交换内存对您的应用程序有益,cloud-init使您能够使用mounts模块在首次启动时提供交换内存。只需在现有的云配置用户数据中添加几行:swap:filename:/swapfilesize:automaxsize:4294967296此配置告诉cloud-init在/swapfile中创建一个自动调整大小(接近或小于4GB)的交换文件。swap大小自动调整格式在cloud-init的源码中:formulas=[#<1G:swap=doublememory(1*GB,lambdax:x*2),#<2G:swap=2G(2*GB,lambdax:2*GB),#<4G:swap=memory(4*GB,lambdax:x),#<16G:4G(16*GB,lambdax:4*GB),#<64G:1/2Muptomax(64*GB,lambdax:x/2),]RedHat建议的交换大小略有不同:2GB或更少的系统RAM:2xRAM大于2GB至8GB:1xRAM大于8GB至64GB:至少4GB大于64GB:至少4GB您可以使用cloud-config中的size:参数手动指定交换内存(以字节为单位)swap:filename:/swapfilesize:2147483648#2GiB在现有云实例上配置交换内存对于现有实例,交换文件通常是最简单的启用交换内存的方法。在此示例中,将2GB交换文件放在/swapfile中:#BTRFOnly#####################################################################我们必须禁用btrfs文件系统上交换文件的写时复制更新.#The'swapon'stepfailsifyousskipthesesteps.truncate-s0/swapfilechattr+C/swapfile#BTRFOnly######################################################################A2GiBswapfile.ddif=/dev/zeroof=/swapfilebs=1MiBcount=2048#Setthecorrectpermissionsontheswapfile.chmod0600/swapfile#Formattheswapfile.mkswap/swapfile#Enabletheswapfile.swapon/swapfile#Additto/etc/fstabtoenableitafterreboot.echo"/swapfilenoneswapdefaults00">>/etc/fstab检查swap内存是否就绪:$cat/proc/swapsFilenameTypeSizeUsedPriority/swapfilefile20971480-2原标题:在云实例上分析和再次设置交换空间的案例,作者:MajorHayden(RedHat)