Linux虚拟内存是什么

Linux虚拟内存是什么

虚拟内存是现代操作系统的基础之一,但通常情况下,除非您遇到问题,否则您不会真正考虑它。 Linux 发行版要求您在安装期间设置虚拟内存空间(交换分区),但大多数初学者并不知道这有多大用处。

这是您需要了解的有关 Linux 上的虚拟内存的所有信息。

推荐:12个最佳Linux桌面环境

什么是Linux虚拟内存

虚拟内存是一种表示您的内存的方式,它是从您机器上的物理内存中抽象出来的。 它利用您的 RAM 和存储空间,无论是在传统硬盘驱动器还是 SSD 上。

在 Linux 中,这是在内核和硬件级别完成的。 CPU 有一个称为内存管理单元 (MMU) 的硬件,它将物理内存地址转换为虚拟内存地址。 这些地址与它们在机器上的物理位置无关。 这些地址空间被称为“页面”,它们可能位于 RAM 中,也可能位于您的硬盘驱动器或 SSD 中。 操作系统将这些地址视为一个大内存池,称为“地址空间”。

虚拟内存利用了这样一个事实,即理论上并非所有正在使用的内存都一直在使用。 内存中的程序被分解成页面,内核认为不必要的部分被“换出”或移动到硬盘驱动器。 当需要它们时,可以将它们“换入”或带回 RAM。

驱动器上用于虚拟内存的空间称为“后备存储”或“交换空间”。 在 Windows 世界中,它通常被实现为一个文件,称为“交换文件”。 在 Linux 中也可以这样做,但使用专用磁盘分区更为常见。

Linux 上的交换文件通常保留给最小系统或嵌入式系统,后者通常在完全没有虚拟内存的情况下运行,因为嵌入式操作系统必须很小。

虚拟内存的结果是,可以通过使用比机器中的物理 RAM 更多的内存来运行大型程序,类似于信用卡可以让您以比银行账户中更多的钱进行大宗购买。 就像信用卡一样,虚拟内存在您需要时很有用,但您不想过度使用它。


虚拟内存还允许开发人员创建应用程序,而不必知道计算机的内存是如何组织的。

历史上虚拟内存的主要缺点是硬盘驱动器比 RAM 慢。 如果一台机器没有足够的 RAM,系统可以无休止地交换页面,这个过程被称为“抖动”。 在具有更多 RAM 和更快 SSD 取代机械硬盘驱动器的现代 PC 上,这不是问题,但仍然需要注意。

Linux 交换分区

Linux 交换分区

如前所述,在 Linux 上设置虚拟内存的常用方法是使用专用磁盘分区。 安装实用程序将检查您的硬件并提出一个包含交换分区的分区方案。

您还可以在安装后添加交换分区。 如果要向现有驱动器添加新分区,则必须使用 GParted 等非破坏性分区工具。 确保您已选择“Linux swap”作为分区的文件系统。

在重新分区驱动器之前备份重要数据。

创建分区后,使用 mkswap 命令格式化分区。

sudo mkswap /dev/sdX

现在你必须编辑你的 /etc/fstab 以 root 身份添加您的交换分区。 添加到文件中的这一行将设置一个在引导时挂载的交换分区:

/dev/sdX none swap defaults 0 0

现在使用 swapon 激活新交换空间的命令,其中 sdX 是交换分区的名称:

sudo swapon /dev/sdX

在 Linux 上使用交换文件

在 Linux 中使用命令行很容易设置交换文件。 如果您不想费心重新分区驱动器或编辑,您可能想要这样做 /etc/fstab. 一种方法是使用 fallocate分配

例如,要创建一个 2GB 的交换文件:

sudo fallocate -l 2G /path/to/swapfile

作为替代方案,您可以使用 dd 命令创建交换文件。

sudo dd if=/dev/zero of=/path/to/swapfile bs=1024 count=2048

确保正确使用 dd 命令,因为输入文件和输出文件错误会导致数据丢失。 出于这个原因, fallocate 是首选方法。

这  /dev/zero  device 是输出“0”的特殊设备。 此 dd 命令所做的是使用适合用作交换空间的 1024 KB 块创建一个空白的 2 GB 块文件。

然后,您可以使用 mkswap交换swapon交换 使用交换文件的命令就像使用交换分区一样:

sudo mkswap /path/to/swapfile
sudo swapon /path/to/swapfile

您可能想知道何时应该为您的交换空间使用交换文件或专用分区。 选择很简单:在大多数情况下,您应该使用分区。 这是 Linux 桌面或服务器的最佳选择。 安装程序建议的分区方案通常适用于单用户 Linux 桌面。

如果您在虚拟机、小型嵌入式系统上运行 Linux,或者您只是不想对现有 Linux 系统进行重新分区,则可能需要使用交换文件。

多少交换空间?

多年来,需要多少交换空间的标准建议是物理 RAM 的两倍。 即使是最便宜的 PC 也配备大容量驱动器和大量内存,这条规则可能会受到质疑。

在许多系统上,如果您检查 top 或 htop,您甚至可能会注意到,如果您以这种方式设置系统,您的交换空间甚至根本没有被使用。

尽管如此,如果您对内存提出更高的要求,两倍的物理内存是一个很好的起点和保险政策。 您可以根据需要对系统进行更改。 如果您的系统正在使用所有 RAM,则计算机在使用虚拟内存时可能会遇到性能问题。

计算机可以不断地交换进出,这个过程被称为抖动,使它看起来没有响应。 如果你还有一个机械硬盘,你经常可以听到它不断的访问。

如今,这已经不是什么大问题了,因为即使是最便宜的 PC 上的 RAM 量也绰绰有余,而且 SSD 的速度也比旧硬盘快得多。 这仍然是您应该注意的事情。

解决此问题的最简单方法是向您的计算机添加更多 RAM。 如果这不可行,您可以尝试调整 Linux 内核的“swappiness”。

swappiness 数字决定了内核在虚拟内存中投入了多少。 它的范围从 0 到 100。将其设置为 0 意味着 Linux 根本不会交换,而在 100 时,它会随时交换。 大多数系统的默认值为 60。

要临时更改 swappiness,请使用 sysctl 命令:

sudo sysctl vm.swappiness=20

该命令中的“20”将是交换编号,直到您重新启动。 要永久更改它,请编辑 /etc/sysctl.conf 文件作为根并放置行,“vm.swappiness=[swappiness number]“, 在哪里 ”[swappiness number]” 是您想要的交换数量。这将是一个权宜之计,直到您可以安装更多 RAM。

Linux虚拟内存让系统平稳运行

虚拟内存是现代操作系统(包括 Linux)的一个组件,可让您的计算机平稳运行。 您可以使用交换文件,但通常的方法是专用分区。 您不必考虑太多,但 Linux 交换分区和交换文件很容易设置和排除故障。

许多这种建议也适用于其他系统,包括 Windows,即使设置虚拟内存的方法不同。

推荐:如何为Linux应用程序创建任务栏和菜单项


发表评论