如何为你的Ubuntu添加虚拟内存

什么是虚拟内存

虚拟内存是计算机系统管理内存的一种技术,它通过结合物理内存(RAM)和磁盘存储来提供一个更大的、统一的内存空间。虚拟内存允许操作系统和应用程序认为它们有更多的内存可用,而不受限于物理内存的实际大小。

用大白话来说就是:虚拟内存可以作为物理内存的拓展,使用你的部分硬盘空间作为内存空间,允许操作系统和应用使用超出物理内存的空间。

比如说我们某台服务器的物理内存为2G,现在我们为它添加2G的虚拟内存,那么这台服务器的实际可使用内存就为4G。

对于虚拟内存来说,以下有几个重要概念:

  • 物理内存 (RAM):实际安装在计算机中的内存芯片,用于存储当前运行的程序和数据。
  • 虚拟内存:操作系统通过使用磁盘空间(如交换文件或交换分区)扩展物理内存,创建一个更大的内存空间。
  • 交换空间 (Swap):用于存储不常用的内存页的磁盘空间。当物理内存不足时,操作系统会将不常用的数据从RAM移到交换空间,从而释放RAM用于更重要的任务。
  • 页 (Pages):虚拟内存将内存分割成大小相等的小块,称为页。操作系统可以根据需要将这些页在物理内存和交换空间之间移动。

虚拟内存的工作原理:

  • 地址空间:每个进程都有自己独立的虚拟地址空间。进程在这个虚拟地址空间中运行,不需要了解物理内存的布局。
  • 页表 (Page Table):操作系统使用页表来记录虚拟内存地址到物理内存地址的映射关系。当进程访问某个虚拟地址时,操作系统通过页表找到相应的物理地址。
  • 页面置换:当物理内存不足时,操作系统会选择一些不常用的内存页移到交换空间,以腾出物理内存用于当前需要的任务。这种过程称为页面置换。
  • 页面错误 (Page Fault):当进程访问的内存页不在物理内存中时,会触发页面错误。操作系统捕获页面错误并从交换空间中将所需的内存页加载回物理内存。

优点:

  • 更大内存空间:虚拟内存提供的内存空间大于实际的物理内存,使得系统可以运行更多的程序或处理更大的数据集。
  • 内存保护:每个进程有自己的虚拟地址空间,相互隔离,增加了系统的稳定性和安全性。
  • 内存管理:虚拟内存简化了内存管理,操作系统可以更有效地利用物理内存资源。

缺点:

  • 性能开销:频繁的页面置换会导致磁盘I/O操作增加,影响系统性能。
  • 复杂性:实现虚拟内存需要额外的硬件支持(如内存管理单元)和复杂的软件算法。
  • 硬件损耗:如果你使用的个人电脑是设置虚拟内存分区位于SSD上,那么虚拟内存的使用会显著降低你的硬盘寿命。

小结

虚拟内存是现代计算机系统中必不可少的一部分,它通过结合物理内存和磁盘存储,为操作系统和应用程序提供了一个更大、更灵活的内存空间,同时提供内存保护和更高效的内存管理。

一般情况下我们不建议你设置的虚拟内存大小超过物理内存,希望需要依赖交换空间来储存那些不常用的内存页,这样会大量占用系统I/O,使得系统极不稳定。

动手!

假设我们希望创建一个2GB的交换空间

sudo fallocate -l 2G /swapfile

设置权限:

sudo chmod 600 /swapfile

配置交换空间

sudo mkswap /swapfile

验证交换空间

sudo swapon /swapfile

此时虚拟内存的配置以及完成,到这一步了你的终端应该是这样的:

这是我们验证交换空间

sudo swapon --show

如果你的虚拟内存设置成功了应该会输出:

之后我们永久启用交换文件

编辑 /ect/fstab文件(sudo nano /ect/fstab)并在最后一行添加:

/swapfile none swap sw 0 0

之前我们说了,系统会交换物理内存虚拟分区,我们可以通过调整交换分区的使用策略从而优化性能。编辑 /ect/sysctl.conf文件并添加:

vm.swappiness=10

这个数值的大小为 0~100,数值越大则越频繁使用交换空间。

然后应用更改:

sudo sysctl -p

如图,我这里就已经开始使用虚拟内存了:

总结

试一试吧 试一试吧 不试试你怎么知道你会~

小树,小树!