Linux的swap其实就和Windows的虚拟内存差不多。

    Swap其实就是在系统的运行内存不够用的时候,把真实物理内存中一部分不活跃的活动,转移到硬盘中的swap分区(如果有),腾出物理内存供当前活跃的应用使用。当被转移到swap分区中的应用重新活跃时,系统便会将其存储在swap中的数据取出转移到真实的物理内存中。

    其实我们在Windows下,把一个长期滞留于后台的应用重新打开时,你会听到主机的声音变大了。其实那就是系统将存储在swap分区中的数据取出,高速读取硬盘时的声音(机械硬盘)

    需要说明一点,并不是所有从物理内存中交换出来的数据都会被放到Swap中(如果这样的话,Swap就会不堪重负),有相当一部分数据被直接交换到文件系统。例如,有的程序会打开一些文件,对文件进行读写(其实每个程序都至少要打开一个文件,那就是运行程序本身),当需要将这些程序的内存空间交换出去时,就没有必要将文件部分的数据放到Swap空间中了,而可以直接将其放到文件里去。如果是读文件操作,那么内存数据被直接释放,不需要交换出来,因为下次需要时,可直接从文件系统恢复;如果是写文件,只需要将变化的数据保存到文件中,以便恢复。

    但是那些用malloc和new函数生成的对象的数据则不同,它们需要Swap空间,因为它们在文件系统中没有相应的“储备”文件,因此被称作“匿名”(Anonymous)内存数据。这类数据还包括堆栈中的一些状态和变量数据等。所以说,Swap空间是“匿名”数据的交换空间。


关于Linux(国内汉化版)中安装手册上所描述 swap 不能超过128MB 到 后来 swap不能超过2GB

    其实Linux的swap分区根本没有限制,只要你的硬盘够大,理论上是没有限制的。而2GB这个限制似乎是来源于在过去发行的Linux中,32位系统单个文件大小不能大于2GB(好像是可以接触这个限制,我没有详细了解)


最好设置Swap!

    分配的Swap太少,会在服务器超负载时错误;

    而分配过多的Swap会浪费硬盘

    如果物理内存用完了,服务器最多运行缓慢;而当Swap空间用完时系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程),如果Swap空间用完,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。


设置建议

    Swap空间应大于或等于物理内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存的1.5-2.5倍。但根据不同的应用,应有不同的配置:如果是小的桌面系统,则只需要较小的Swap空间,而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服务器,随着访问量的增加,对Swap空间的要求也会增加。


Swap设置一键脚本For Linux

    再简单的命令,也可以写成脚本

    使用方法:

wget https://raw.githubusercontent.com/1264822519/swap/master/swap.sh && bash swap.sh

    按照提示操作

Last modification:March 1st, 2020 at 10:51 pm
如果觉得我的文章对你有用,请随意赞赏