虚拟内存是为了满足物理内存不足而采用的一种策略,利用磁盘空间虚拟出一段逻辑内存,用作虚拟内存的空间就是swap分区。作为物理内存的扩展,Linux会在物理内存不足时使用swap分区的逻辑内存,内核会将暂时不用的内存块信息写入swap空间,从而释放物理内存,而这内存可以使用当内容需要用于其他用途时,信息将重新从交换分区读取到物理内存中。Linux的内存管理采用分页访问机制。为了保证物理内存得到充分利用,内核会在适当的时候自动将物理内存中不常用的数据块交换到虚拟内存中。信息被持久化到物理内存中。注意:一般从各个云厂商购买的云服务器是不会给我们添加虚拟内存的。比如通过阿里云安装的系统不会自动为我们分配Swap虚拟内存空间;交换分区或虚拟内存文件是系统物理内存不足时,长时间未被系统内存管理程序操作的分区,一种临时保存到Swap分区的虚拟内存文件以增加可用内存量的机制。当这些程序要再次运行时,之前保存的数据会从Swap分区或虚拟内存文件中恢复到内存中。一开始使用free-m和df-h查看当前内存情况并创建swap分区,输入命令:ddif=/dev/zeroof=/data/swapbs=512count=4096000(因为我的内存是2G,所以虚拟内存设置为内存的1~2倍,则2048*2=4096)这里的命令创建一个swap,大小为bs*count=4096000(4G),如图下图:使用mkswap命令将新建的文件打成swapPartition,命令:mkswap/opt/swap检查内核参数vm.swappiness中的值是否为0,如果为0,根据实际需要调整检查命令:cat/proc/sys/vm/swappiness调整命令:sysctl-wvm.swappiness=60这里默认为0,可以根据需要调整为60。(我这里设置的是60,因为物理内存比较小,大量使用swap空间会影响IO性能,还是要充分压榨物理内存。)输入swapon/data/swap,输入echo"/data/swapswapswapdefaults00">>/etc/fstab(虽然现在已经生效了,等下次服务器重启。swap虚拟磁盘会失效,到确保永久生效,需要在/etc/fstab文件中添加分区信息:)再次使用cat/proc/swaps查看swap分区是否启动,如下图,已经启动成功。再次使用free-m和df-h查看磁盘状态,可以看到当swap区已经建立时,磁盘容量比初始容量减少了1.9GPS:相关操作会导致额外IO开销,特别是如果内存使用率已经很高,同时IO性能不是很好,这种机制实际上会产生相反的效果:不仅系统性能提升很小(因为内存使用率已经是非常高),同时也由于内存到Swap的频繁切换操作,会产生大量额外的IO操作,导致IO性能进一步下降,最终导致系统整体性能下降。
