关注分享主机优惠活动
国内外VPS云服务器

linux交换空间的作用是什么(linux交换空间不足的原因)

本文主要讲解“linux交流空间的作用是什么”,感兴趣的朋友不妨看看。本文介绍的方法简单、快速、实用。让主机频道带你学习“linux交换空间的作用是什么”!

linux交换空间的作用是增加主机可用的虚拟内存;交换空间是现代Linux系统中的第二种内存类型。交换空间的主要作用是当所有RAM被占用,需要更多内存时,用磁盘空间替换RAM内存。

Linux系统上的交换空间介绍

了解如何修改系统上交换空间的容量以及需要多少交换空间。如今,交换空间在任何操作系统中都很常见。Linux使用交换空间来增加主机可用的虚拟内存。它可以在常规文件或逻辑卷上使用一个或多个专用交换分区或交换文件。

在典型的计算机中有两种基本类型的存储器。第一种是随机存取存储器(RAM ),用于存储计算机使用的数据和程序。只有当程序和数据存储在RAM中时,计算机才能使用它们。随机存取存储器是易失性存储器;换句话说,如果电脑关机,存储在RAM中的数据就会丢失。

硬盘是长期存储数据和程序的磁介质。磁介质可以很好的存储数据;即使计算机关机,存储在磁盘上的数据仍会保留。CPU(中央处理器)不能直接访问硬盘上的程序和数据;它们必须首先被复制到RAM中,RAM是CPU访问代码指令和操作数据的地方。在引导过程中,计算机将硬盘上的特定操作系统程序(如kernel、init或systemd)和数据复制到RAM中,计算机的处理器CPU可以直接访问这些数据。

交换空间交换空间是现代Linux系统中的第二种内存类型。交换空间的主要作用是当所有RAM被占用,需要更多内存时,用磁盘空间替换RAM内存。

例如,假设您有一台8GB内存的计算机。如果你启动的程序没有填满ram,一切都会好的,不需要交换。假设您正在处理一个电子表格,当您添加更多行时,您的电子表格将增长,并且所有正在运行的程序将占用所有RAM。如果此时没有可用的交换空间,您将不得不停止处理电子表格,直到您关闭一些其他程序来释放一些RAM。

内核使用内存管理器来检测最近未使用的内存块(内存页面)。内存管理器将这些相对不常用的内存页面切换到硬盘上专门指定用于“分页”或交换的特殊分区。这将释放内存,为在电子表格中输入更多数据腾出空间。换出到硬盘的内存页面由内核的内存管理代码跟踪,如果需要的话可以分页返回到RAM。

Linux电脑中的总内存是RAM+交换分区,称为虚拟内存。

Linux交换分区类型Linux提供两种类型的交换空间。默认情况下,大多数Linux会在安装时创建一个交换分区,但是您也可以使用一个特殊配置的文件作为交换文件。顾名思义,交换分区是标准的磁盘分区,交换空间由mkswap命令指定。

如果没有空闲磁盘空间来创建新的交换分区,或者卷组中没有空间来为交换空间创建逻辑卷,则可以使用交换文件。这只是一个创建并预先分配了指定大小的常规文件。然后运行mkswap命令将其配置为交换空间。除非绝对必要,否则我不建议使用文件作为交换空间。(LCTT译:Ubuntu最近的版本使用交换文件而不是交换空格,所以我对这种说法保留意见)

频繁交换当总虚拟内存(RAM和交换空间)几乎满了时,可能会发生频繁的交换。系统花费太多时间在交换空间和RAM之间切换内存块的页面,以至于几乎没有时间进行实际工作。这种情况的典型症状是系统变得缓慢或完全没有反应,硬盘指示灯几乎持续亮起。

使用free命令显示CPU负载和内存使用情况,会发现CPU负载很高,可能达到系统CPU核数的30到40倍。另一种情况是RAM和交换空间几乎完全被分配。

其实查看SAR(系统活动报告)数据也可以显示这些内容。在我的每个系统上安装SAR,并使用它们进行数据分析。

交换空间的正确大小是多少?很多年前,硬盘上分配的交换空间大小是电脑上RAM的两倍(当然,这是在大多数电脑的RAM以KB或MB为单位的情况下)。因此,如果一台计算机有64KB的RAM,就应该分配一个128KB的交换分区。这条规则考虑到了这样一个事实,即当时RAM的大小非常小,分配两倍以上的RAM用于交换空间并不能提高性能。使用两倍多的RAM进行交换,大多数系统将花费比实际执行有用工作更多的时间。

RAM现在非常便宜,大多数计算机现在都有几十亿字节的RAM。我的大多数新电脑至少有8GB内存,一台有32GB内存,我的主工作站有64GB内存。我的旧电脑有4到8GB的内存。

在运行内存量较大的计算机时,交换空间的极限性能系数远低于2倍。Fedora 28的在线安装指南定义了当前的交换空间分配方法。以下是我的建议。

下表根据系统中RAM的大小以及是否有足够的内存使系统休眠,提供了建议的交换分区大小。推荐的交换分区大小是在安装过程中自动确定的。但是,为了满足系统休眠,需要在自定义分区阶段编辑交换空间。

表Fedora 28文档中推荐的系统交换空间

系统内存大小推荐交换空间推荐交换空间大小(支持休眠模式)小于2 GB2倍RAM3倍RAM2 GB-8 GB等于RAM大小2倍RAM8 GB-64 GB0.5倍RAM1.5倍RAM大于64 GB,不推荐休眠模式。

根据选定的交换空间和对休眠功能的支持,应谨慎使用上面列出的每个范围之间的界限(例如,2GB、8GB或64GB的系统RAM)。如果系统资源允许,增加交换空间可能会带来更好的性能。

当然,大多数Linux管理员对于交换空间的大小有自己的想法。下面的表2包含了基于我在各种环境中的个人经验的建议。这些可能不适合你,但是如表1所示,它们可能对你有帮助。

表2:作者推荐的系统交换空间

RAM大小建议交换空间≤2GB 2 xram 2GB–8GB = RAM > 8GB 8GB

这两张表的共同点是,随着RAM的增加,超过某一点再增加更多的交换空间,只会导致在交换空间几乎用完之前频繁交换。根据上面的建议,你应该尽可能多的增加RAM,而不是增加更多的交换空间。如同影响系统性能的类似情况,请使用最适合你的建议。根据Linux环境中的条件进行测试和更改需要时间和精力。

向非LVM磁盘环境添加更多交换空间面对安装了Linux的主机以及对交换空间不断变化的需求,有时有必要修改系统定义的交换空间大小。这个过程可以在任何需要增加交换空间的情况下使用。它假设有足够的可用磁盘空间。这个过程还假设磁盘分区是“原始的”EXT4和交换分区,而不是使用逻辑卷管理(LVM)。

基本步骤很简单:

关闭现有的交换空间。

创建所需大小的新交换分区。

重读分区表。

将分区配置为交换空间。

向/etc/fstab添加一个新分区。

打开交换空间。

应该不需要重启机器。

为了安全起见,在关闭交换空间之前,至少应该确保没有应用程序在运行,也没有交换空间在使用。free或top命令可以告诉您交换空间是否在使用中。为了获得更高的安全性,您可以恢复到运行级别1或单用户模式。

使用关闭所有交换空间的命令关闭交换分区:

Swapoff -a现在查看硬盘上现有的分区。

这将显示每个驱动器上的分区表。通过数字标识当前交换分区。

使用以下命令以交互模式启动fdisk:

fdisk/dev/& lt;设备名称& gt例如:

此时,Fdisk是交互式的,并且只在指定的磁盘驱动器上运行。

使用fdisk的p子命令验证磁盘上是否有足够的可用空间来创建新的交换分区。硬盘上的空间以512字节的块以及起始和结束柱面编号显示,因此您可能需要进行一些计算来确定已分配分区之间和末尾的可用空间。

使用n子命令创建一个新的交换分区。Fdisk将要求您启动气缸。默认情况下,它会选择编号最小的可用气缸。如果您想改变这一点,请输入起始气缸的编号。

fdisk命令允许您以各种格式输入分区的大小,包括最后一个柱面编号或字节大小,KB或MB。例如,键入4000M,这将在新分区上提供大约4GB的空间,然后按Enter键。

使用p子命令验证分区是以指定的方式创建的。请注意,除非使用结束柱面编号,否则分区可能与您指定的不完全相同。fdisk命令只能在整个柱面上增量分配磁盘空间,因此您的分区可能比您指定的稍小或稍大。如果分区不是您想要的,您可以删除它并重新创建它。

现在指定新分区是一个交换分区。子命令t允许您指定分区的类型。所以输入t,指定分区号,当需要十六进制分区类型时,输入82,这是Linux exchange分区类型,然后回车。

当您对创建的分区感到满意时,使用w子命令将新的分区表写入磁盘。fdisk程序将在写入修改后的分区表后退出并返回到命令提示符。当fdisk完成写入新分区表时,它将收到以下消息:

分区表被改动了!调用ioctl()重新读取分区表。警告:重新读取分区表失败,错误16:设备或资源忙。内核仍然使用旧表。新表将在下次重新启动时使用。同步磁盘。此时,您使用partprobe命令强制内核重新读取分区表,因此无需重启机器。

Partprobe使用命令fdisk -l列出分区,新的交换分区应该在列出的分区中。确保新的分区类型是“Linux swap”。

修改/etc/fstab文件以指向新的交换分区。如下所示:

Label = swap-sdax交换默认值为00,其中x是分区号。根据新交换分区的位置,添加以下内容:

/dev/sdayswap交换默认值00请确保使用正确的分区号。现在,您可以执行创建交换分区的最后一步。使用mkswap命令将分区定义为交换分区。

mkswap /dev/sdaY的最后一步是使用以下命令启用交换空间:

Swapon -a您的新交换机分区现在与以前存在的交换机分区在线。您可以使用free或top命令来验证这一点。

在LVM磁盘环境中添加交换空间如果您的磁盘使用LVM,更改交换空间将非常容易。同样,假设当前交换卷所在的卷组中有空闲空间。默认情况下,LVM环境中的Fedora Linux在安装期间创建交换分区作为逻辑卷。您可以非常简单地增加交换卷的大小。

以下是在LVM环境中增加交换空间的步骤:

关闭所有交换空间。

增加为交换空间指定的逻辑卷的大小。

为交换空间调整大小的卷配置。

启用交换空间。

首先,让我们使用lvs命令(列出逻辑卷)来验证交换空间是否存在,以及交换空间是否是逻辑卷。

[root @ student VM 1 ~]# LVS LV VG Attr LSize Pool Origin Data % Meta % Move Log Cpy % Sync Convert home fedora _ student VM 1-wi-ao-2.00g Pool 00 fedora _ student VM 1 twi-aotz-2.00g ro ot fedora _ student VM 1 Vwi-aotz-2.00g Pool 00 8.17 swap fedora _ student VM 1-wi-ao-8.00g tmp在这种情况下,我们希望向该交换卷添加2GB。首先,停止现有的交换空间。如果交换空间正在使用中,请终止正在运行的程序。

Swapoff -a现在增加了逻辑卷的大小。

[root @ studentvm 1 ~]# lvextend-L+2G/dev/mapper/fedora _ studentvm 1-逻辑卷的交换大小fedora_studentvm1/ Swap从8.00 gib (2048个区)更改为10.00 gib (2560个区)。逻辑卷Fedora _ Student VM 1/Swap已成功调整大小。[root @ Student VM 1 ~] #运行mkswap命令,将整个10GB分区变成交换空间。

[root @ studentvm 1 ~]# MK swap/dev/mapper/fedora _ studentvm 1-swapmkswap:/dev/mapper/fedora _ studentvm 1-swap:警告:正在清除旧的交换签名。正在设置交换空间版本1,size = 10 GiB (10737414144字节)无标签,Uuid = 3c 2 bee 0-e746-4b 66-aa2d-1ea 15 ef 1574 a[root @ student VM 1 ~]#重新启用交换空间。

[root @ student VM 1 ~]# swap on-a[root @ student VM 1 ~]#现在,使用lsblk命令验证新的交换空间是否存在。同样,不需要重启机器。

[root @ student VM 1 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE挂载点sda 8:0 0 60G 0 disk |-sda 1 8:1 0 1G 0 part/boot `- sda 2 8:2 0 59G 0 part |-fedora _ student VM 1-pool 00 _ t meta 253:0 0 4M 0 LVM | `- fedora _ student VM 1-pool 00-tpool 253:2 0 2G 0 LVM | |-fedora _ student VM 1-1 `-fedora _ studentvm 1-pool 00 253:6 0 2G 0 LVM |-fedora _ studentvm 1-SWAP 253:4 0 10G 0 LVM[SWAP]|-fedora _ studentvm 1-usr 253:5 0 15G 0 LVM/usr |-fedora _ studentvm 1-home 253:7 0 2G 0 LVM/home |-fedora _ studentvm 1-var 253:8 0 10G 0 LVM/var `- fedora _ studentvm

[root @ studentvm 1 ~]# free total used free shared buff/Cache available mem:4038808 382404 2754072 4152 902332 3404184 swap:10485756 0 10485756[root @ studentvm 1 ~]#请注意,不同的命令以不同的形式显示或要求输入设备文件。有许多方法可以访问/dev目录中的特定设备。

未经允许不得转载:主机频道 » linux交换空间的作用是什么(linux交换空间不足的原因)

评论 抢沙发

评论前必须登录!