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.mfbz.cn/a/876239.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE初阶】多线程(4)

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 线程安全的 第四个原因 代码举例: 分析原因 解决方法 方法1 方法2 wait(等待)和notify(通知) wait和sleep区别 线程安全的 第四个原因 内存可见性,引起的线程安全问…

CloudXR 套件扩展 XR 工作流

NVIDIA为开发者提供了一个先进的平台,开发者可以在该平台上使用全新NVIDIA CloudXR 套件来创建可扩展、品牌化的定制扩展现实(XR)产品。 NVIDIA CloudXR 套件基于全新架构而打造,是扩展XR生态的重要工具。它为开发者、专业人士和…

彻底理解浅拷贝和深拷贝

目录 浅拷贝实现 深拷贝实现自己手写 浅拷贝 浅拷贝是指创建一个新对象,这个对象具有原对象属性的精确副本 基本数据类型(如字符串、数字等),在浅拷贝过程中它们是通过值传递的,而不是引用传递,修改值并不…

Git项目管理工具

分布式版本控制系统

数据集 wider person 户外密集行人检测 >> DataBall

数据集 wider person 用于野外密集行人检测的多样化数据集 行人检测 目标检测 户外密集行人检测的多样化数据集 WiderPerson: A Diverse Dataset for Dense Pedestrian Detection in the Wild article{zhang2019widerperson, Author {Zhang, Shifeng and Xie, Yiliang and Wa…

常用环境部署(二十)——docker部署OpenProject

一、安装Docker及Docker-compose https://blog.csdn.net/wd520521/article/details/112609796 二、docker拉取OpenProject镜像 1、拉取镜像 docker pull openproject/openproject:14 注意: 拉取镜像的时候会有超时的现象出现,大家重新拉取几次就行…

链式二叉树的基本操作(C语言版)

目录 1.二叉树的定义 2.创建二叉树 3.递归遍历二叉树 1)前序遍历 2)中序遍历 3)后序遍历 4.层序遍历 5.计算节点个数 6.计算叶子节点个数 7.计算第K层节点个数 8.计算树的最大深度 9.查找值为x的节点 10.二叉树的销毁 从二叉树…

分贝转换 1 mVpp = 9.03dBmV

分贝转换 1 mVpp 9.03dBmV 函数发生器调节如下参数在频谱仪器上能看到9.03dBmv的电压值函数发生器产生 30mVpp 频谱仪会显示多少dBmV 函数发生器调节如下参数 输出频率:10 MHz 波形类型:正弦波 阻抗:50 Ω 幅度:1 mVpp …

【计算机网络 - 基础问题】每日 3 题(六)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…

回溯-重新安排行程

1.排序 Collections.sort(list,(o1, o2)-> o1.get(0).compareTo(o2.get(0))); 2.返回值 3.往集合添加元素 Arrays.asList(元素) List<List<String>> list new ArrayList<>();List<String> path new ArrayList<>();// 将[["JFK"…

影刀RPA实战:网页爬虫之CSDN博文作品数据

今天我们使用影刀来采集网页数据&#xff0c;影刀RPA是一款功能强大的自动化办公软件&#xff0c;它可以模拟人工的各种操作&#xff0c;帮助企业自动处理大量重复性、有逻辑规则的工作。影刀RPA在网页数据采集方面表现出色&#xff0c;能够实现对任何桌面软件、Web程序的自动化…

Python基础语法(1)上

常量和表达式 我们可以把 Python 当成一个计算器&#xff0c;来进行一些算术运算。 print(1 2 - 3) print(1 2 * 3) print(1 2 / 3) 这里我们可能会有疑问&#xff0c;为什么不是1.6666666666666667呢&#xff1f; 其实在编程中&#xff0c;一般没有“四舍五入”这样的规则…

第 13 章 兵马未动,粮草先行——InnoDB 统计数据是如何收集的

表的统计数据&#xff1a;SHOW TABLE STATUS LIKE table_name; 索引的统计数据&#xff1a;SHOW INDEX FROM table_name; 13.1 两种不同的统计数据存储方式 InnoDB 提供了两种存储统计数据的方式&#xff1a; 永久性的统计数据。存储在磁盘上&#xff0c;服务器重启之后还在…

华为 HCIP 认证费用和报名资格

在当今竞争激烈的信息技术领域&#xff0c;华为 HCIP认证备受关注。它不仅能提升个人的技术实力与职业竞争力&#xff0c;也为企业选拔优秀人才提供了重要依据。以下将详细介绍华为 HCIP 认证的费用和报名资格。 一、HCIP 认证费用 华为HCIP认证的费用主要由考试费和培训费构成…

Maven下载安装

下载 下载地址&#xff1a;Maven – Download Apache Maven 选择合适的版本进行下载 windows&Linux安装 1, 解压apache-maven-3.6.1.rar即安装完成 2&#xff0c; 配置环境变量MAVEN_HOME为安装路径&#xff0c;并将MAVEN_HOME的bin目录配置到PATH下 3&#xff0c;…

C#命令行参数解析库System.CommandLine介绍

命令行参数 平常在日常的开发过程中&#xff0c;会经常用到命令行工具。如cmd下的各种命令。 以下为sc命令执行后的截图&#xff0c;可以看到&#xff0c;由于没有输入任何附带参数&#xff0c;所以程序并未执行任何操作&#xff0c;只是输出了描述和用法。 系统在创建一个新…

最佳实践 · MySQL 分区表实战指南

引言 在数据量急剧增长的今天&#xff0c;传统的数据库管理方式可能无法有效处理海量数据的存储和查询需求。MySQL 提供了分区表功能&#xff0c;这不仅能够帮助优化性能&#xff0c;还能简化数据管理过程。分区表允许将数据表拆分成多个逻辑上的分区&#xff0c;每个分区可以…

资源管理新视角:利用 FastAPI Lifespan 事件优化你的应用II

本文说明在 FastAPI 应用程序中使用 lifespan 事件来管理资源的加载和卸载。lifespan 事件允许你在应用启动时执行一些初始化代码&#xff0c;并在应用关闭时执行一些清理代码。这是通过使用异步上下文管理器实现的&#xff0c;具体来说&#xff0c;是通过 asynccontextmanager…

什么是职场?职场的本质又是什么呢?

最近&#xff0c;经常看到很多职场相关的&#xff0c;比如职场必备技能、职场人际关系、职场晋升等等&#xff0c;这些都是职场的一些方面&#xff0c;但是却少有人来深入剖析什么是职场&#xff0c;职场的本质又是什么&#xff0c;今天我们就来一起来聊一聊&#xff0c;到底职…

音视频入门基础:AAC专题(5)——FFmpeg源码中,判断某文件是否为AAC裸流文件的实现

一、引言 通过FFmpeg命令&#xff1a; ./ffmpeg -i XXX.aac 可以判断出某个文件是否为AAC裸流文件&#xff1a; 所以FFmpeg是怎样判断出某个文件是否为AAC裸流文件呢&#xff1f;它内部其实是通过adts_aac_probe函数来判断的。从《FFmpeg源码&#xff1a;av_probe_input_for…