linux中Swap分区是做什么的?

Swap分区是硬盘上的交换空间,用于缓解内存不足和优化内存碎片。内存分段和虚拟内存使得程序可以独立占用内存空间,但可能导致碎片。内存碎片通过Swap交换区进行整理,而内存分页则将内存划分为小块,提高效率。Swap不仅用于整理内存,还在内存不足时将不活跃程序移到硬盘,扩展内存使用。然而,过度依赖Swap会导致性能下降。因此,合理配置Swap对于服务器性能至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


​ 我们在操作服务器的时候,一般会用top命令查看整体系统资源,top命令除了CPU,内存以及任务运行情况等,在内存的显示信息下边还有一行信息,就是Swap,它跟内存的表示方法一样,以总量,空闲,使用大小来表示当前的占用情况,那它到底是什么呢,跟内存有什么区别么?

​ swap用英文表示是交换的意思,简单说Swap区就是服务器上的交换区,这块区域其实是硬盘,并不是内存,首先它的用法肯定是用来做交换的,系统是用内存和Swap区做交换,有两个目的,第一个就是减少系统内存碎片问题。第二个是增加内存的使用率,总的来说,它就是为了保证内存的最大化利用,接下来就简单了解一下为什么需要这块区域来完成这件事情。

内存分段

内存分段的意思是,我们内存空间被占用的时候,是需要以段的形式被占用,程序内部占用的虚拟内存的空间,对应的是物理内存上的一段实际空间。

物理内存

我们电脑插入的内存条,都是物理内存,对于一个可执行程序来说,它在编译成机器码之后,装载器会将所有执行的指令组合成一段按照顺序执行的指令空间,因为指令需要按照顺序执行,所以这块空间需要是连续的,可以想象成我们的数组一样。程序越复杂,可能占用的空间就会越大。如果仅仅使用物理内存,多个可执行程序同时运行的时候,没办法准确的让某个程序去占用某一段物理内存,如果存在竞争问题,那就会出现内存数据覆盖等一些问题。为了解决这个问题,设计出了虚拟内存这个东西。

虚拟内存

虚拟内存其实就是通过映射关系,将可执行程序的内存空间,合理化的分配到了物理内存上,对于程序来说,它占用的就是一块独立的内存空间,但是它占用的位置都是虚拟内存映射出来的,通过映射可以让程序去占用某一块非固定的物理内存。但是对于程序来说,占用的内存空间是独立的,不需要再考虑竞争的问题。

内存碎片的出现

从上边内存分段我们知道,每个程序都是占用了一段空间,但是会因为程序的复杂程度,空间的大小都不一定,这种就会有一种情况,可能空余出来的某一小段内存,永远无法被新的程序占用。假设有一个内存为100M的电脑,上边装了四个程序。

  • a(20M)

  • b(60M)

  • c(10M)

  • d(30M)

按顺序启动a,b,c三个程序。然后再想启动d程序,肯定是启动不起来的,因为内存不够了。那关掉第a程序,空间虽然够了,单依然无法起来,因为b程序正好占了内存的中间一段,哪怕现在有30M的空闲,但是他们不连续,无法分配给新程序,无法分配的空间就是内存碎片,整个内存无法被合理的进行使用。

Swap交换区

根据我们上边说的,虽然有空余空间,但是不连续,无法合理使用,想要解决的话,肯定是想办法让这些内存碎片连在一起。根据上边的四个程序,我们需要将b程序占用的内存挪到最前边0的位置,将C程序挪到1的位置,这样前边占用的空间就连在了一起,已使用的空间放在了一起,后边就都是未使用的空间。但是内存没办法支持那么大一块空间在内存里直接移动,所以就出现了Swap交换区,这块单独的空间,就是用来做存储交换的。可以将b程序先放在这块交换空间上,然后再把交换空间上的东西挪到内存0的位置。这样就完成了内存的整理。解决我们上边提到的内存碎片的问题。但是这种方式有个问题就是硬盘的操作比内存中慢很多,程序越大,那么完成这个交换的时间就越长,效率低下,影响程序使用。

内存分页

既然交换的内容过大,会变慢,那想办法让每次交换的内容变小,是不是就可以优化这个问题?设计者使用了分页的概念,虚拟内存与物理内存把整段的空间映射成一个一个小空间,将程序的占用分成了linux默认4KB大小的小空间。将内存占用分成这一个一个小块,先不说交换的会不会变快,我第一个问题就是内存是不是都不用交换了 ,随机找几十块4K的空间出来那不是很容易,为什么依然还需要交换区?其实这回交换区的作用就不再是为了单纯的减少内存碎片了。

有了内存之后的Swap

上边说的,有了内存分页之后,交换区可以不再去考虑那些4KB空间的小事,但是它能做的事情就更大了,它不再只是为了减少内存碎片,内存在不够分配的时候,系统会将不活跃的程序挪到Swap交换空间中,内存只保留活跃使用的程序,当需要使用的时候,再把这些程序挪回内存,这样变相的提升内存空间的使用率,甚至说扩大了内存空间,虽然慢了些,但是不会出现一些异常问题,给我们足够的时间去关闭程序或者做一些其他操作。

Swap区的弊端

当然交换区虽然有很多好处,但是也存在一定的弊端,因为本来硬盘的读写速度和内存比起来相差甚远

  1. 如果真的服务器上物理内存不够用了,依然还是一直在跟硬盘做资源交换,系统可能会有延迟,阻塞的问题
  2. 从swap区拿回内存的程序,在拿的过程中,肯定会有卡顿的问题。

总结

本片文章简单介绍了Swap分区的作用,交换区虽然可以在一定程度上提升内存的使用率,但是在真正的服务器运行环境中,我们要根据自己的需求去分配Swap空间,或者是否考虑使用它。要看我们真的需要服务器一直苟延残喘,还是直接让它抛出错误,我们及时扩容内存或者调整程序。

本文为个人极客时间,深入浅出计算机组成原理笔记,如有理解问题麻烦指出,感谢

<think>嗯,用户问的是LinuxSwap分区作用和推荐的大小配置。首先,我需要回顾一下Swap分区的基本知识。Swap分区Linux系统中作为虚拟内存使用,当物理内存不足时,系统会将部分内存数据转移到Swap空间,防止应用程序崩溃。不过,分配太多Swap会浪费磁盘空间,太少又可能导致系统错误,所以合理配置很重要。接下来,用户提供的引用内容里提到了一些操作步骤,比如使用dd命令创建swap文件,用mkswap格式化,然后挂载。这些步骤可能和调整Swap大小有关,但用户现在的问题更关注作用和建议大小,所以需要从引用中提取相关信息。比如引用[4]提到Swap调整对服务器性能至关重要,特别是Web服务器,要避免性能瓶颈。引用[3]提到Swap一般设置为内存的1.5到2倍,不过现在这个建议可能有些过时,需要结合当前最佳实践。然后,我需要考虑不同应用场景下的Swap配置。比如桌面环境和服务器可能有不同的需求。桌面用户如果启用休眠功能,Swap可能需要至少等于物理内存大小。而服务器如果内存充足,可能不需要太大的Swap,但保留一些作为应急是好的。此外,现在内存普遍较大,传统建议的1.5倍可能不再适用,比如对于8GB内存的桌面系统,可能4GB Swap就足够了,而对于服务器,可能根据具体应用调整。 还要注意权限问题,引用[3]中提到创建swap文件时权限设置不正确会有警告,需要改为0600。这可能是一个实际操作的注意点,但用户的问题可能不需要详细步骤,不过可以在相关问题里提到修复或调整Swap的方法。另外,用户之前的问题是关于ESP分区的,现在转向Swap,可能是在学习Linux系统管理,需要系统的知识。可能需要将Swap作用分点说明,比如内存扩展、休眠支持、内存回收机制等。引用[2]和[4]都提到了Swap作用,需要整合这些信息,确保引用标注正确。最后,生成相关问题时要考虑用户可能进一步的问题,比如如何调整Swap大小、Swap分区和文件的区别、如何监控Swap使用情况,以及如何优化Swap性能。这些问题能帮助用户深入理解Swap的管理和优化。</think>### Linux Swap分区作用及配置建议 --- #### 一、Swap分区的核心作用 1. **内存扩展机制** - 当物理内存(RAM)不足时,Swap通过将**不活跃内存页**写入磁盘空间,提供虚拟内存扩展能力[^4] - 防止因内存耗尽导致的系统崩溃(OOM Killer强制终止进程) 2. **休眠支持** - 休眠(Hibernation)功能需要Swap空间存储内存快照,其大小至少等于物理内存容量 3. **内存回收优化** - 允许内核主动释放未使用的内存页,提升内存利用率 - 通过`swappiness`参数(默认值60)控制内存与Swap的交换频率[^3] --- #### 二、Swap大小配置建议 | 系统类型 | 推荐配置 | |-----------------|--------------------------------------------------------------------------| | **传统服务器** | $$ \text{Swap} = 1.5 \times \text{RAM} $$(适用于RAM ≤ 4GB)[^3] | | **现代服务器** | RAM ≥ 8GB时,建议配置4GB~8GB(兼顾安全性与磁盘利用率)[^4] | | **桌面系统** | 启用休眠需Swap ≥ RAM,否则建议配置RAM的$\frac{1}{2}$~1倍 | | **云服务器** | 根据负载特性动态调整,高内存应用可配置0.5倍RAM,无休眠需求可最小化配置 | --- #### 三、配置示例(以16GB内存服务器为例) ```bash # 创建8GB Swap文件 dd if=/dev/zero of=/swapfile bs=1G count=8 chmod 600 /swapfile # 修正权限警告[^3] mkswap /swapfile swapon /swapfile # 永久生效配置 echo '/swapfile swap swap defaults 0 0' >> /etc/fstab ``` --- #### 四、性能调优建议 1. **监控工具** ```bash free -h # 查看内存/Swap使用比例 vmstat 2 # 监控si/so(Swap输入/输出频率) swapon -s # 查看活跃Swap设备 ``` 2. **参数调整** - 修改`/proc/sys/vm/swappiness`(范围0-100) - 降低swappiness值可减少Swap使用倾向(数据库服务器建议设为10-30) ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值