Linux灵活释放交换空间,提升系统性能 (linux释放交换空间)

在Linux系统中,交换空间为系统提供了一种扩展内存的手段。当物理内存不足时,内核会将一些不常用的内存数据写到交换空间中,以便系统能够更灵活地运行。然而,在系统高负荷运行时,交换空间也会成为系统瓶颈。为了提升系统性能,Linux采用了一系列策略来灵活释放交换空间。

1.交换空间的概念和用途

交换空间是一块磁盘空间,由Linux内核用于暂存不活跃(页面中断)的进程内存数据。当系统运行时,内核会将进程内存数据复制到交换空间中,并从物理内存中释放,从而腾出更多的物理内存空间。当这些数据再次被需要时,内核会从交换空间中读取数据,并将其拷贝到物理内存中。

交换空间通常位于硬盘上,因此访问速度比内存慢很多,但相对于物理内存而言,交换空间的容量更大。因此,交换空间为系统提供了一种扩展内存的方式。当物理内存不足时,交换空间可以暂存部分数据,以便系统能够正常运行。

2.交换空间的优化

尽管交换空间可以扩展Linux系统的内存容量,但使用交换空间也会影响系统性能,特别是在高负荷运行时。因此,Linux内核采用了一系列策略来优化交换空间的使用,以提高系统性能。

2.1.交换空间的调度

Linux内核采用了一种基于优先级的队列调度算法,用于决定哪些数据应该被换出到交换空间中。在这种算法中,内核将页面根据其优先级放到不同的队列中,而更低优先级的页面最容易被换出到交换空间中。

各个进程的内存使用情况对于交换空间的调度也有很大的影响。当物理内存不足时,内核会尝试从不同的进程中选取优先级更低的页面进行换出。当一个进程使用了大量的内存时,它的页面就可能比其他进程的页面更容易被换出到交换空间中。因此,内存使用效率也会影响系统的交换空间调度效率。

2.2.交换空间的大小

交换空间的大小也会影响系统性能。交换空间越大,系统可以扩展的内存容量就越大,但同时,交换空间占用的磁盘空间也越大。因此,交换空间应该根据系统内存使用情况和磁盘容量来合理配置。

2.3.交换空间的位置

交换空间的物理位置也会影响性能。建议将交换空间放在磁盘的最外侧部分(即磁盘的之一簇),这样可以提高读写速度。此外,在配置交换空间的时候,还可以根据具体使用情况进行优化,例如可以将交换空间放在磁盘的不同分区内。

3.和建议

交换空间为Linux系统提供了一种扩展内存的手段,但过量的交换空间使用会导致系统性能下降。因此,在配置交换空间时,需要根据系统内存使用情况和磁盘容量来综合考虑,合理地配置交换空间大小和位置。同时,开启适当的交换空间调度策略,可以提高系统的交换空间效率,减小系统的响应时间,提升系统性能。

相关问题拓展阅读:

给Linux分配多少Swap空间才够呢?

Swap交换大小应该是多少?交换应该是RAM大小的两倍还是RAM大小的一半?如果我的系统有几GB的RAM,我是否需要交换?

也许这些是关于在安孝斗装Linux时选择交换大小的最常见问题。

这不是什么新鲜事。交换大小一直存在很多混乱。

很长一段时间,推荐的交换大小是RAM大小的两倍,但这条黄金法则不再适用于现代计算机。

我们的系统RAM大小高达128 GB,许多旧计算机甚至没有这么多的硬盘。但是你会分配到具有32 GB RAM的系统的交换大小? 64GB?那将是一个荒谬的硬盘浪费,不是吗?

在了解需要分配Swap空间应该分配多大之前,让我们先快速了解交换内存的一两件事。

这些有助于让每个人真正理解为什么Linux需要Swap交换空间。

我们都知道计算机系统在运行的时候会使用到RAM(Random Access Memory),当只有少数应用程序在运行时,系统会使用可用的RAM进行管理。

但是如果有很多很多的程序在运行,那么就需要非常大容量RAM,这时候计算机RAM不够,应用程序就会崩溃。

当RAM耗尽时,Swap交换空间会被系统使用。当RAM耗尽时,Linux系统使用部分硬盘内存并将其分配给正在运行的应用程序。

这听起来非常不错,这意味着如果我们如果分配50GBSwap交换空间,系统或许可以同时运行成百上千的应用程序?是这样么?大错特错!!!

你知道的,程序运行速度十分重要;

RAM访问数据的大小为纳秒级;

SSD访问数据(以微秒为单位),而普通硬盘以毫秒为单位访问数据;

这意味着RAM比SSD快1000倍,比普通HDD快100,000倍。

如果应用程序过分依赖Swap交换空间,则其伏陵性能将下降,因为它无法以与RAM中相同的速度访问数据。

因此,完成相同任务可能需要几分钟才能完成任务,而不需要花费1秒钟完成任务。这将使应用程序几乎无用。这被称为计算术语中的颠簸。

Swap交换空间只是用来应急的,所以它的分配要适量。

以下是需要交换空间Swap的几个原因

如果你的RAM有32GB或者64GB,你的系统可能永远都不会使用到这么多的交换分区。

我猜测缺慎戚,如果你的系统有32GB的RAM,它或许至少有100GB的硬盘。

分配几GB的交换空间应该也无关痛痒,如果错误的程序开始滥用RAM,它将提供额外的“稳定性”。

现在回到这个更大的问题上,应该给Linux分配多少Swap空间才够。

答案是没有一个确切的答案,不过倒是有一些建议,不同的人根据自己的实际情况分配交换空间的大小。

如果根据Red Hat的建议,他们建议是分配RAM 20%的换空间,也就是RAM是8GB,分配1.6GB交换空间。

CentOS建议

Ubuntu考虑到系统需要休眠,

Ubuntu建议的Swap分配表

事实上没有一个真正确定的Swap交换空间分配大小,根据实际情况来吧,如果你不在乎多点交换空间,可以使用两倍于RAM的这种方案。

你更倾向于使用哪种方案呢?

Linux内存系统

——虚拟内存定义

All about Linux swap space

Linux将物理RAM (Random Access Memory) 划分为称为页面的内存块。交换是将一页内存复制到硬盘上的预配置空间(称为交换空间)以释放改内存页面上的过程。物理内存和交换空间的组合就是可用的虚拟内存量。

虚拟内存的那点事儿

进程是与其他进程共享CPU和内存资源的。为了有效的管理内历纯存并减少出错,现代操作系统提供了一种对主存的抽象概念,即:虚拟内存( Virtual Memory )。

虚拟内存为每个进程提供一个一致的,私有的地址空间,每个进程拥有一片连续完整的内存空间。

正如 所说,虚拟内存不只是“使用硬盘空间来扩展内存”的技术。

虚拟内存的重要意义是它定义了一个连续的虚拟地址空间,

使得程序编写难度降低。并且,

把内存扩展到硬盘空间只是使用虚拟内存的必然结果,虚拟内存空间会存在硬盘中,并且会被全部放入内存中缓冲(按需),有的操作系统还会在内存不够的情况下,将一进程的内存全部放入硬盘空间中,并在切换到进程时再从硬盘读取

(这也是Windows会经常假死的原因…)。

虚拟内存主要提供了如下三个重要的能力:

内存通常被组织为一个由M个连续的字节大小的单元组成的数组。每个字节都有一个唯迅烂氏一的物理地址 (Physical Address PA) ,作为到数组的索引。

CPU访问内存最简单直接的方法就是使用物理地址,这种寻址方式称为

物理寻址

现代计算机使用的是一种被称为虚拟寻址 (Virtual Addressing) 的寻址方式。

使用虚拟寻址,CPU需要将虚拟地址翻译成物理地址,这样才能访问到真实的物理内存。

虚拟寻址需要硬件与操作系统之间相互合作。

CPU中含有一个被称为内存管理单元 (Memory Management Unit,MMU) 的硬件,它的功能是将虚拟地址转换称为物理地址,MMU需要借助存放在内存中的 页表 来动态翻译虚拟地址,该页表由操作系统管理。

分页表是一种数据结构,它用于计算机操作系统中虚拟内存系统,其存储了虚拟地址到物理地址之间的映射。虚拟地址在访问进程中是唯一的,而物理地址在硬件(比如内存)中是唯一的。

在操作系统中使用

虚拟内存

,每个进程会认为使用一块大的连续的内存,事实上,每个进程的内存散布在

物理内存

的不同区域。或者可能被调出到备份存储中(一般是硬盘)。当一个进程请求自己的内存,操作系统负责把程序生成的虚拟地址,映射到实际存储的物理内存上。操作系统在

分页表

中存储虚拟地址到物理地址的映射。每个映射被称为

分页表项(page table entry ,PTE)

在一个简单的地址空间方案中,由虚拟地址寻址的页与物理内存中的帧之间的关系。物理内存可以包含属于许多进程的页。如果不经常使用,或者物理内存已满,可以将页面分页到磁盘。在上图中,并非所有页面都在物理内存中。

虚拟地址到物理地址的转换(即虚拟内存的管理)、内存保护、CPU高速缓存的控制。

现代的内存管理单元是以

的方式,分割虚拟地址空间(处理器使用的地址范围)的;页的大小是2的n次方,通常为几KB(字节)。地址尾部的n位(页大小的2的次方数)作为页内的偏移量保持不变。其余的地址位(address)为(虚拟)页号。

内存管理单元通常借助一种叫做转译旁观缓冲器(Translation Lookaside Buffer,TLB)和相联高速缓存来将虚拟页号转换为物理页号。当后备缓冲器中没有转换记录时,则使用一种较慢的机制,其中包括专用硬件的数据结构或软件辅助手段。这个数据结构称为

分页表

,页表中的数据叫做

分页表项

(page table entry PTE)。物理页号结合页偏移量便提供了完整的物理地址。

页表 或 转换后备缓冲器数据项应该包括的信息有:

有时候,TLB和PTE会

禁止对虚拟页访问

,这亩散可能是因为没有RAM与虚拟页相关联。如果是这种情况,MMU将向CPU发出页错误的信号,操作系统将进行处理,也许会寻找RAM的空白帧,同时建立一个新的PTE将之映射到所请求的虚拟地址。如果没有空闲的RAM,可能必须关闭一个已经存在的页面,使用一些替换算法,将之保存到磁盘中(这被称为页面调度)。

当需要将虚拟地址转换为物理地址时,首先搜索TLB,如果找到匹配(TLB)命中,则返回物理地址并继续存储器访问。然而,如果没有匹配(称为TLB未命中),则MMU或操作系统TLB未命中处理器通常会查找

页表

中的地址映射以查看是否存在映射(页面遍历),如果存在,则将其写回TLB(这必须完成,因为硬件通过虚拟存储器系统中的TLB访问存储器),并且重启错误指令(这也可以并行发生)。此后续转换找到TLB命中,并且内存访问将继续。

虚拟地址到物理地址的转换过程,如果虚拟内存不存在与TLB,转换会被重置并通过分页表和硬件寻找。

通常情况下,用于处理此中断的程序是操作系统的一部分。如果操作系统判断此次访问有效,那么

操作系统会尝试将相关的分页从硬盘上的虚拟内存文件调入内存。

而如果访问是不被允许的,那么操作系统通常会结束相关的进程。

虽然叫做“页缺失”错误,但实际上这并不一定是一种错误。而且这一机制是利用虚拟内存来增加程序可用内存空间。

发生这种情况的可能性:

当原程序再次需要该页内的数据时,如果这一页确实没有被分配出去,那么系统只需要重新为该页在MMU内注册映射即可。

操作系统需要:

硬性页缺失导致的性能损失是很大的。

另外,有些操作系统会将程序的一部分延迟到需要使用的时候再加载入内存执行,以此提升性能。这一特性也是通过捕获硬性页缺失达到的。

当硬性页缺失过于频繁发生时,称发生

系统颠簸。

具体动作与所使用的操作系统有关,比如Windows会使用异常机制向程序报告,而类Unix系统则使用信号机制。

尽管在整个运行过程中,程序引用不同的页面总数(也就是虚拟内存大小)可能超出了物理存储器(DRAM)总大小,但是程序常常在较小的活动页面上活动,这个叫做工作集或者常驻集。在工作集被缓存后,对它的反复调用会使程序命中提高,从而提高性能。

大部分的程序都可以在存储器获取数据和读取中达到稳定的状态,当程序达到稳定状态时,存储器的使用量通常都不会太大。虚拟内存虽然可以有效率控制存储器的使用,

但是大量的页缺失还是造成了系统迟缓的主要因素。

当工作集的大小超过物理存储器大小,程序将会发生一种不幸的情况,这种情况称为

“颠簸”

,页面将不停的写入、释放、读取,由于大量的丢失(而非命中)而损失极大性能。用户可以增加随机存取存储器的大小或是减少同时在系统里运行程序的数量来降低系统颠簸的记录。

推荐阅读:

操作系统–分页(一)

操作系统实现(二):分页和物理内存管理

如何解决Linux系统Swap耗尽问题

Linux系统上可以同时有多个swap,根据是用swapon -s命令可以看到系统上所有的swap,而用free命令看到的是swap总的大小。所以swap不够用时可以再建立一个swap,一般是用建立swap文件的方式配知添加一个swap空间。下面以1G大小的文件为例介绍如何用文件建立内存交换空间:

1. 使用dd命令在某个目录(实际使用悉梁时换成其他目录,/tmp目录的数据会在重启后丢失)下新建一个1G的文件:

dd if=/dev/培陆消zero of=/tmp/swap bs=1M count=1024

解释:1M是单位,1024是数目,合计1024M就是总大小1G

2. 格式化这个文件为swap格式:(用mkswap命令)

mkswap /tmp/swap

3. 启动swap,用swapon命令(就是将新建的swap添加到系统):

swapon /tmp/swap

4. 查看效果(用swapon的-s参数):

swapon -s

可以看到所有的swap分区,如果成功了,/tmp/swap必然在里面。然后再用free命令查看,就可以看到swap空间增加了。

linux释放交换空间的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux释放交换空间,Linux灵活释放交换空间,提升系统性能,给Linux分配多少Swap空间才够呢?,Linux内存系统,如何解决Linux系统Swap耗尽问题的信息别忘了在本站进行查找喔。


数据运维技术 » Linux灵活释放交换空间,提升系统性能 (linux释放交换空间)