了解如何修改系统交换空间的容量,以及您真正需要多少交换空间。无论今天的操作系统是什么,交换交换空间都是很常见的。Linux使用交换空间来增加主机可用的虚拟内存。它可以在常规文件或逻辑卷上使用一个或多个专用交换分区或交换文件。典型计算机中有两种基本类型的内存。第一种是随机存取存储器(RAM),用于存储计算机使用的数据和程序。计算机只能使用存储在RAM中的程序和数据。随机存取存储器是易失性存储器;也就是说,如果关闭计算机,存储在RAM中的数据将丢失。硬盘是一种磁性介质,用于长期存储数据和程序。磁介质非常擅长保存数据;即使计算机断电,存储在磁盘上的数据也会保留。CPU(中央处理器)不能直接访问硬盘上的程序和数据;它们必须首先被复制到RAM中,这是CPU访问代码指令和操作数据的地方。在启动过程中,计算机将某些操作系统程序(如内核、init或systemd)和数据从硬盘复制到RAM中,计算机的处理器CPU可以直接访问这些数据。交换空间交换空间是现代Linux系统中的第二种内存类型。交换空间的主要作用是当所有RAM被占用并且需要更多内存时,用磁盘空间替换RAM内存。例如,假设您有一台RAM为8GB的??计算机。如果您启动不填满RAM的程序,一切都很好,不需要交换。假设您正在处理电子表格。随着更多行的添加,您的电子表格将增长,加上所有正在运行的程序,将占用所有RAM。如果此时没有可用的交换空间,您将不得不停止处理电子表格,直到您关闭一些其他程序以释放一些RAM。内核使用内存管理器来检测最近未使用的内存块(页面)。内存管理程序将这些相对不常用的内存页面交换到硬盘上指定用于“分页”或交换的特殊分区。这样可以释放RAM,为将更多数据输入电子表格腾出空间。那些换出到磁盘的内存页面由内核的内存管理代码跟踪,并且可以在需要时调回RAM。Linux计算机内存总量为RAM+交换分区,交换分区称为虚拟内存。Linux交换分区类型Linux提供两种交换空间。默认情况下,大多数Linux安装都会创建交换分区,但也可以使用专门配置的文件作为交换文件。交换分区,顾名思义,就是一个标准的磁盘分区,交换空间由mkswap命令指定。如果没有可用的磁盘空间来创建新的交换分区,或者如果卷组中没有空间来为交换空间创建逻辑卷,则可以使用交换文件。这只是一个创建并预分配为指定大小的常规文件。然后运行??mkswap命令将其配置为交换空间。除非绝对必要,否则我不建议使用文件作为交换空间。(LCTT译注:Ubuntu的最新版本使用交换文件而不是交换空间,因此我对这种说法保留意见)频繁交换当总虚拟内存(RAM和交换空间)快满时,就会发生频繁交换。系统花费大量时间在交换空间和RAM之间对内存块进行分页,以至于几乎没有时间进行实际工作。这种情况的典型症状是:系统变得缓慢或完全没有响应,并且HDD指示灯几乎一直亮着。使用free命令显示CPU负载和内存使用情况,会发现CPU负载很高,可能是系统CPU核数的30到40倍。另一种情况是RAM和交换空间几乎完全分配。事实上,查看SAR(系统活动报告)数据也可以揭示这一点。我在我的每个系统上都安装了SAR,并使用它们进行数据分析。交换空间的正确大小是多少?许多年前,硬盘上分配的交换空间量是计算机RAM大小的两倍(当然,那时候大多数计算机的RAM以KB或MB为单位)。因此,如果计算机有64KB的RAM,则应分配128KB的交换空间。该规则考虑到当时RAM大小非常小并且为交换空间分配超过2倍RAM并没有提高性能的事实。在大多数系统上,使用两倍以上的RAM进行交换将花费比实际执行有用工作更多的时间。现在RAM很便宜,现在大多数计算机都有GB的RAM。我的大多数新电脑至少有8GB内存,一台有32GB,我的主工作站有64GB。我的旧电脑有4到8GB的??内存。当运行具有大量RAM的计算机时,交换空间的限制性能因素远低于2x。Fedora28在线安装指南定义了交换空间分配的当前方法。以下是我的建议。下表根据系统中的RAM量以及是否有足够的内存供系统休眠提供了建议的交换分区大小。建议的交换分区大小是在安装过程中自动建立的。但是,为了满足系统休眠,您需要在自定义分区阶段编辑交换空间。表一:Fedora28文档中推荐的系统交换空间<如果显示不完整,请左右滑动>系统内存大小推荐交换空间推荐交换空间大小(支持休眠模式)小于2GB2倍RAM3倍RAM2GB-8GB等于RAM大小2倍RAM8GB-64GB0.5倍RAM1.5倍RAM大于64GB或64GBSystemRAM),请根据选择的交换空间和休眠支持谨慎使用。如果您的系统资源允许,增加交换空间可能会带来更好的性能。当然,大多数Linux管理员对于应该有多少交换空间都有自己的想法。下面的表2包含基于我在各种环境中的个人经验的建议。这些可能对您不起作用,但像表1一样,它们可能对您有所帮助。表2:作者推荐的系统交换空间<如果显示不完整,请左右滑动>RAM大小推荐交换空间≤2GB2XRAM2GB–8GB=RAM>8GB8GB这两个表中的共同点,与增加RAM的数量,增加超过某个点的更多交换空间只会导致在交换空间几乎被完全使用之前频繁交换。基于以上建议,您应该添加尽可能多的RAM,而不是添加更多的交换空间。对于影响系统性能的类似情况,请使用最适合您的建议。根据Linux环境中的条件进行测试和更改需要花费时间和精力。向非LVM磁盘环境添加更多交换空间对于安装了Linux的主机和不断变化的交换空间要求,有时需要修改系统定义的交换空间的大小。此过程可用于需要增加交换空间大小的任何情况。它假定有足够的可用磁盘空间。此过程还假定磁盘分区为“原始”EXT4和交换分区,而不是使用逻辑卷管理(LVM)。基本步骤很简单:关闭现有的交换空间。创建所需大小的新交换分区。重新读取分区表。将分区配置为交换空间。将新分区添加到/etc/fstab。打开交换空间。应该不需要重新启动机器。为了安全起见,您至少应该确保在关闭交换空间之前没有应用程序正在运行并且没有交换空间正在使用。free或top命令可以告诉您交换空间是否正在使用中。为了更加安全,您可以恢复到运行级别1或单用户模式。使用关闭所有交换空间的命令关闭交换分区:swapoff-a现在查看硬盘驱动器上的现有分区。fdisk-l这将显示每个驱动器上的分区表。按编号标识当前交换分区。使用以下命令以交互方式启动fdisk:fdisk/dev/<设备名称>例如:fdisk/dev/sda此时,fdisk是交互的,只对指定的磁盘驱动器进行操作。使用fdisk的p子命令验证磁盘上是否有足够的可用空间来创建新的交换分区。硬盘上的空间以512字节的块显示,并带有开始和结束柱面号,因此您可能需要进行一些计算以确定分配分区之间和末尾的可用空间。使用n子命令创建一个新的交换分区。fdisk将要求您启动柱面。默认情况下,它选择编号为***的可用柱面。如果要更改此设置,请输入起始气缸的编号。fdisk命令允许您以多种格式输入分区的大小,包括最后一个柱面号或以字节、KB或MB为单位的大小。例如,键入4000M,这将在新分区上提供大约4GB的空间,然后按Enter。使用p子命令验证分区是否按指定创建。请注意,除非您使用结束柱面号,否则分区可能与您指定的不完全相同。fdisk命令只能以整个柱面为增量分配磁盘空间,因此您的分区可能比您指定的稍小或稍大。如果分区不是你想要的,你可以删除它并重新创建它。现在指定新分区是交换分区。子命令t允许您指定分区类型。所以键入t,指定分区号,当它要求十六进制分区类型时,键入82,这是Linux交换分区类型,然后按回车键。当您对创建的分区感到满意时,使用w子命令将新的分区表写入磁盘。fdisk程序将在写入修改后的分区表后退出并返回到命令提示符。当fdisk完成写入新的分区表时,您会收到以下消息:分区表已被更改!调用ioctl()重新读取分区表。警告:重新读取分区表失败,出现错误16:设备或资源繁忙。内核仍然使用旧表。新表将在下次重新启动时使用。同步磁盘。此时,你使用partprobe命令强制内核重新读取分区表,这样你就不需要执行重启机器了。partprobe使用命令fdisk-l列出分区,新的交换分区应该在列出的分区中。确保新的分区类型是“Linuxswap”。修改/etc/fstab文件以指向新的交换分区。如下:LABEL=SWAP-sdaXswapswapdefaults00其中X为分区号。根据新交换分区的位置,添加以下内容:/dev/sdaYswapswapdefaults00确保使用正确的分区号。现在,可以执行创建交换分区的最后一步。使用mkswap命令将分区定义为交换分区。mkswap/dev/sdaY最后一步是使用以下命令启用交换空间:swapon-a您的新交换分区现在与先前存在的交换分区一起联机。您可以使用free或top命令验证这一点。在LVM磁盘环境中添加交换空间如果您的磁盘使用LVM,则更改交换空间相当容易。此外,假设当前交换卷所在的卷组中有空闲空间。默认情况下,LVM环境中的FedoraLinux在安装期间将交换分区创建为逻辑卷。您可以非常简单地增加交换卷的大小。以下是在LVM环境中增加交换空间大小的步骤:关闭所有交换空间。增加指定用于交换空间的逻辑卷的大小。为交换空间调整卷配置大小。启用交换空间。首先,让我们使用lvs命令(列出逻辑卷)验证交换空间是否存在并且是一个逻辑卷。[root@studentvm1~]#lvsLVVGAttrLSizePoolOriginData%Meta%MoveLogCpy%SyncConverthomefedora_studentvm1-wi-ao----2.00gpool00fedora_studentvm1twi-aotz--2.00g8.172.93rootfedora_studentvm1Vwi-aotz--2.00gpool008.17swapfedora_studentvm1-wi-ao----8.00gtmpfedora_studentvm1-wi-ao----5.00gusrfedora_studentvm1-wi-ao----15.00gvarfedora_studentvm1-wi-ao----10.00g[root@studentvm1~]#可以看到当前交换空间大小为8GB。在这种情况下,我们要向此交换卷添加2GB。首先,停止现有的交换空间。如果交换空间正在使用,则终止正在运行的程序。swapoff-a现在增加了逻辑卷的大小。[root@studentvm1~]#lvextend-L+2G/dev/mapper/fedora_studentvm1-swap逻辑卷fedora_studentvm1/swap的大小从8.00GiB(2048个扩展)更改为10.00GiB(2560个扩展)。逻辑卷fedora_studentvmize/.[root@studentvm1~]#运行mkswap命令将整个10GB分区变成swap空间。[root@studentvm1~]#mkswap/dev/mapper/fedora_studentvm1-swapmkswap:/dev/mapper/fedora_studentvm1-swap:warning:wipingoldswapsignature.Settingupswapspaceversion1,size=10GiB(10737414144bytes)无标签,UUID=3cc2bee0-e746-4b66-aa2d-1ea15ef1574a[root@studentvm1~]#重新启用交换空间。[root@studentvm1~]#swapon-a[root@studentvm1~]#现在,使用lsblk命令验证新的交换空间是否存在。同样,无需重新启动机器。[root@studentvm1~]#lsblkNAMEMAJ:MINRMSIZEROTYPEMOUNTPOINTsda8:0060G0disk|-sda18:101G0part/boot`-sda28:2059G0part|-fedora_studentvm1-pool00_tmeta253:004M0lvm|`-fedora_studentvm1-pool00-tpool253:202G0lvm||-fedora_studentvm1-root253:302G0lvm/|`-fedora_studentvm1-pool00253:602G0lvm|-fedora_studentvm1-pool00_tdata253:102G0lvm|`-fedora_studentvm1-pool00-tpool253:202G0lvm||-fedora_studentvm1-root253:302G0lvm/|`-fedora_studentvm1-pool00253:602G0lvm|-fedora_studentvm1-swap253:4010G0lvm[交换]|-fedora_studentvm1-usr253:5015G0lvm/usr|-fedora_studentvm1-home253:702G0lvm/home|-fedora_studentvm1-var253:8010G0lvm/var`-fedora_studentvm1-tmp253:905G0lvm/tmpsr011:011024M0rom[root@studentvm1~]#你也可以使用swapon-s命令或top,free等几个命令来验证这个010485756[root@studentvm1~]#请注意不同的命令显示或需要不同形式的输入设备文件。有几种方法可以访问/dev目录中的特定设备。在我的文章在Linux中管理设备中有更多关于/dev目录及其内容的内容。
