大家好,我是良许。
熟悉计算机的小伙伴都知道,我们常说的主机三大件分别是主板,CPU,内存,可见内存在计算机主机中的角色也非同一般,喜欢 DIY 主机的小伙伴对这三大件的了解更是精益求精。
编写过程序的小伙伴对于程序的执行过程,也是耳熟能详了,先从硬盘加载到内存,然后 CPU 与内存进行数据交换与处理,完成相应的操作(真实执行细节相当复杂),从而实现相应的功能。
但是内存的容量非常有限,由于内存的造价较高(目前常用的内存为双倍速 SDRAM ),计算机用户升级内存容量也是一笔不小的开支。
那么良许就和大家来讨论下计算机的内存如果不够用了, 虚拟内存技术的应用,虚拟内存的出现,让机器内存不够的情况得到部分解决,大家需要注意的是有些资料也将虚拟内存称之为交换内存。
1. 讨论虚拟内存前的热身
我们需要知道的是计算机对内存分为物理内存与虚拟内存(注意虚拟内存和虚拟地址空间的区别)。物理内存就是计算机的实际内存大小,由 RAM 芯片组成的。虚拟内存则是虚拟出来的、使用磁盘代替内存。
2. 虚拟内存的工作原理
正如前面所描述的,当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。
那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到交换空间中,等到那些程序要运行时,再从交换空间中恢复保存的数据到内存中。
3. Linux 虚拟内存的实现方式
Linux 系统实现虚拟内存有两种方法,分别是交换分区( swap 分区)和交换文件。
- 交换分区:交换分区其实就是新建一个分区,然后将该分区挂载作为交换空间,方法步骤与传统的新建分区一样。只不过格式化分区和挂载分区分别采用 mkswap 和 swapon 命令。
- 交换文件:硬盘驱动器中没有足够的空间来创建交换分区,我们就会手动创建一个交换文件以将 RAM 的非活动内容交换到其中。
4. 理想的交换权重
Linux 允许我们自行设置交换的权重,也就是说我们可以设置交换过程发生的频率。小伙伴们可以根据需要在0到100之间设置交换的权重。值越小则代表会让内核尽量少用交换,值越大会使内核更多的去使用交换空间。
交换权重的默认值和建议值为60,有兴趣的小伙伴可以具体去学习 swappiness ,这个 Linux 内核参数,这里不做过多的描述了。
5. 使用虚拟内存的好处
- 它可以轻松地保存那些几乎不使用而又被占用的 RAM 块。然后可以将释放的 RAM 用于容纳更多具有更高优先级的程序。
- 防止 RAM 空间用完,无法执行其他程序的局面。
- 虚拟内存充当了 RAM 的备份,从而增大了 RAM 的实际空间。
- 在休眠过程中,RAM 的所有内容均写入交换空间。因此,成功进行休眠,虚拟内存是必需的。
- 它提高了系统的整体性能。(在内核参数 swappiness 设置合理的情况下)
6. 结论
在本文中,我们学习了交换内存以及它的许多好处,RAM 空间不足时,它将作为 RAM 的扩充进行使用,避免我们的应用程序因内存不足而崩溃。
其实,Swap的调整对 Linux 服务器,特别是 Web 服务器的性能至关重要。通过调整 Swap,有时可以越过系统性能瓶颈,节省系统升级费用。
本文授权转载自公众号「良许Linux」。良许,世界500强外企Linux开发工程师,公众号里分享大量Linux干货,欢迎关注!