当前位置: 首页 > article >正文

Linux-Swap分区使用与扩容

一、背景

        在Linux系统中,swap空间(通常称为swap分区)是一个用于补充内存资源的重要组件。当系统的物理RAM不足时,Linux会将一部分不经常使用的内存页面移动到硬盘上的swap空间中,这个过程被称为分页(paging)或交换(swapping)。这样可以为更重要的进程腾出物理内存,从而保持系统的高效运行。

        平时我们没太注意swap分区的作用以及如何扩容等操作,接下来进行详解。

        swap分区大小设置规则,在生产环境中,交换分区的大小一般为真实物理内存的1.5~2倍,在Linux系统,我们可以参照Redhat公司为RHEL5、RHEL6推荐的SWAP空间的大小划分原则,在你没有其他特别需求时,可以作为很好的参考依据:

        1、内存小于4GB时,推荐不少于2GB的swap空间;

        2、内存4GB~16GB,推荐不少于4GB的swap空间;

        3、内存16GB~64GB,推荐不少于8GB的swap空间;

        4、内存64GB~256GB,推荐不少于16GB的swap空间。

二、应用场景

1、开启swap分区

1. 增加可用内存
  • 内存扩展:当物理内存不足时,swap分区可以作为一个虚拟内存扩展,允许操作系统将部分不活跃的数据从物理内存中移到磁盘上,从而释放物理内存供其他进程使用。
  • 提高并发能力:通过提供额外的内存空间,swap可以允许更多的进程同时运行,即使它们占用了大量的内存。
2. 提高系统稳定性
  • 防止内存耗尽:当系统面临内存压力时,swap可以作为最后一道防线,防止由于内存耗尽而导致的系统崩溃或不稳定。
  • 避免OOM killer:当系统内存非常紧张时,Linux的OOM killer(Out of Memory Killer)可能会终止某些进程以释放内存。而swap的存在可以缓解这种情况,降低进程被强制终止的风险。
3. 进程调度灵活性
  • 内存管理灵活性:swap分区的存在使得内核在进行内存管理时更加灵活,可以根据当前的内存使用情况动态调整哪些数据保留在内存中,哪些数据可以暂时移到磁盘上。
  • 负载均衡:通过swap机制,可以动态平衡系统中各个进程对内存的需求,从而达到更好的负载均衡。
4. 数据保护
  • 持久性存储:即使在系统重启之后,swap分区中的数据也会被清空,但至少在重启之前,它可以作为一个临时的存储空间来保护数据,防止因内存不足而导致的数据丢失。

2、关闭swap分区

1. 提高性能
  • 减少磁盘I/O:关闭swap可以减少磁盘输入输出(I/O)操作,因为没有数据会被频繁地交换到磁盘上。这对于那些对延迟敏感的应用尤其重要。
  • 减少碎片:频繁使用swap可能会导致磁盘上的数据碎片化,关闭swap可以减少这种碎片化的风险。

     1、例如安装MySQL、Elastic、K8S等相对吃性能的服务和软件,通常建议就是执行swapoff -a关闭swap分区,从而提高性能。

    没有了Swap分区,直接使用物理内存,从而减少磁盘IO的交互次数,提高性能.

     2、现在内存卡很便宜, 说实在的, 控制程序使用内存合理, 从而避免OOM的方式相对比使用Swap来避免更为高效。  

2. 提高安全性
  • 数据保密性:关闭swap可以防止敏感数据被写入磁盘,从而减少了数据泄露的风险。这对于处理机密数据的系统尤为重要。
  • 防止未授权访问:swap文件或分区中的数据可能包含敏感信息,关闭swap可以防止在磁盘上留下这些数据,从而提高系统的安全性。
3. 更好的内存管理
  • 内存利用率更高:关闭swap意味着所有运行中的进程必须完全驻留在物理内存中,这促使系统管理员更精细地管理内存资源,确保每个进程都能得到足够的内存。
  • 内存一致性:关闭swap可以确保内存的一致性,因为所有数据都在RAM中,不会出现由于swap导致的数据不同步问题。
4. 适合现代硬件配置
  • 充足的RAM:对于拥有大量RAM的现代服务器或工作站,关闭swap可以充分利用高速内存的优势,减少对较慢的磁盘存储的依赖。
  • 内存密集型应用:对于那些需要高度一致性和快速响应时间的应用程序,关闭swap可以提供更好的性能保障。
5. 便于故障排查
  • 简化调试:关闭swap可以简化系统调试过程,因为不再需要考虑swap对系统行为的影响。
  • 明确的内存使用模式:没有swap的情况下,内存使用模式更加明确,有助于诊断和解决问题。

三、硬盘分区扩容swap

        出于某些原因,例如自己为了省钱买了国外的服务器1-2G内存, 像运行更多的程序,但是仅仅使用物理内存有不够,那么可以稍微扩容一下swap分区,能够支撑程序运行起来。

        虽然性能会差一点,但是总归程序能跑起来吧,也能将就用一下。

1、针对硬盘划分分区

fdisk /dev/sdc

  划分一个分区出来,大小自己定。例如我们的swap本来只有2G,现在想扩容后到4G,需要再扩2G. 所以再分一个2G分区出来:

   此时分区默认的ID是83

2、更改分区ID从83变为82

      我们可以查看fdisk的-l命令,看到分区类型不同ID代表的含义,82是swap分区类型的ID,需要改为82, 默认是83:

        执行t,  输入分区编号, 输入83, 最后w保存即可。

3、mkswap格式化分区

        和普通分区一样,要使用,需要进行格式化分区的文件系统,最后才能挂载使用。swap分区也是如此,只不过不再使用mkfs命令而是mkswap进行格式化。

mkswap /dev/sdc1

4、临时挂载: swapon /dev/sdc1

        临时挂载swap分区进行扩容:

swapon /dev/sdc1

        查看扩容后的结果:

 5、永久挂载swap

        修改/etc/fstab,将挂载命令写入即可,重启后才能正常应用,否则每次需要手动挂载.

四、单文件作为swap分区

1、需求

        这个需求比较有意思。 情况是这样的,我购买的云服务器只有一个盘,这个盘还只分一个分区,这个分区挂在了/根分区上。

        但是现在尴尬了,我的物理内存是1G,我想给2G的一个swap分区,又不想花钱再买一块盘了。那咋整?        

        可以使用单文件作为swap分区,这个就有意思了。 完全可以通过单文件充当swap分区

2、创建/swapfile单文件

fallocate -l 2G /swapfile

   chmod 600  /swapfile

3、使用dd填充初始化文件

dd if=/dev/zero of=/swapfile bs=1M count=2048

 4、mkswap格式化文件

mkswap /swapfile

5、swapon启用/swapfile分区

swapon /swapfile

6、永久启用swap文件

        编辑/etc/fstab文件,文件追加写入即可

/swapfile none swap defaults 0 0

 7、查看free -h ,已经添加了swap分区

 

五、总结

        swap分区看情况吧,内存很富裕的情况下,并且对性能要求高,那么建议直接关闭算了,减少内存和硬盘IO交换的过程。

        内存很紧缺的情况下, 并且对性能要求也没那么高,让多一点程序能跑起来,那么可以尝试开启swap分区或者扩容swap分区,勉强撑一下也行。

        但是对于MySQL、Kafka、K8S节点这些,建议Swap关闭吧,毕竟性能还是要保证的,内存也不贵,这些服务也不至于给8G、16G的内存卡吧,好说歹说基本都是32G起步。

        Swap分区不仅可以使用磁盘分区,还可以使用单文件作为swap分区哟,这个很有意思,有时候也有点用处的^^

 

 


http://www.kler.cn/a/306543.html

相关文章:

  • 应对JSON解析键值对乱序问题的实用解决方案
  • mysql 实现分库分表之 --- 基于 MyCAT 的分片策略详解
  • AcWing 300 任务安排1
  • XML Schema 字符串数据类型
  • 第七部分:2. STM32之ADC实验--AD多通道(AD采集三路传感器模块实验:光敏传感器、热敏传感器、反射式传感器附赠温湿度传感器教程)
  • C# 软件测试
  • Java集合接口List
  • C Primer Plus 第5章习题
  • 【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(三十一)
  • 如何进行IP清洗
  • 嵌入式开发必懂入门知识:认识嵌入式元件
  • Linux设备驱动开发:从基础理论到实战经验的全面解析
  • YoloV10改进策略:Block改进|PromptIR(NIPS‘2023)|轻量高效,即插即用|(适用于分类、分割、检测等多种场景)
  • c++206 友元类
  • R语言 基础笔记
  • 大学选修课无人机航拍技术与技巧怎么样?
  • Github 2024-09-13 Java开源项目日报 Top10
  • Docker技术深度解析与实践应用
  • 调用百度翻译API遇到的跨域问题解决方案
  • mysql笔记5(列属性完整性)
  • 关于C# 数据库访问 转为 C++ CLI 数据库访问
  • 关于API淘宝数据接口
  • 128. 最长连续序列-LeetCode(C++)
  • B/S架构和C/S架构
  • 【计算机网络】初识网络
  • Mixtral 8x7B:开源稀疏混合专家模型的新里程碑