虚拟内存是为了满足物理内存不足采用的策略,利用磁盘空间虚拟出一块逻辑内存,用作虚拟内存的空间也就是交换分区。作为物理内存的扩展,Linux会在物理内存不足时,使用交换分区的逻辑内存,内核会把暂时不用的内存块信息写到交换空间,这样物理内存就得到了释放,这块儿内存就可以用于其他目的,而需要用到这些内容的时候,这些信息就会被重新从交换分区读入物理内存。Linux的内存管理采用的是分页存取机制,为了保证物理内存得到充分的利用,内核会在适当的时间把物理内存中不经常使用的数据块儿自动交换到虚拟内存中,而将充分使用的信息保留到物理内存中。
注:一般在各个云产商购买的云服务器都是不会给我们添加虚拟内存。
例如通过阿里云安装的系统,不会自动给我们分配Swap虚拟内存空间;Swap分区或虚拟内存文件,是在系统物理内存不够用的时候,由系统内存管理程序将那些很长时间没有操作内存数据,临时保存到Swap分区虚拟内存文件中,以提高可用内存额度的一种机制。当那些程序要再次重新运行时,会再从Swap分区或虚拟内存文件中恢复之前保存的数据到内存中。
一开始用 free -m 和 df -h查看现在内存的情况
创建 swap 分区,输入指令: dd if=/dev/zero of=/data/swap bs=512 count=4096000 (因为我的内存是2G,所以虚拟内存设为内存的1~2倍,则2048 * 2 = 4096)
此处的命令创建 swap 大小为bs*count=4096000(4G),如下图:
通过 mkswap 命令将上面新建出的文件做成 swap 分区, 指令: mkswap /opt/swap
查看内核参数 vm.swappiness 中的数值是否为0,如果为0则根据实际需要调整成,
查看指令:cat /proc/sys/vm/swappiness
调整指令:sysctl -w vm.swappiness=60
此处默认为0,根据需要调整为60.(我这里设置的是60,因为物理内存比较小,如果大量使用swap空间影响IO性能。还是要充分压榨物理内存。)
输入 swapon /data/swap
输入 echo "/data/swap swap swap defaults 0 0" >> /etc/fstab
(虽然现在已经生效,但是等下次服务器重启之后。该swap虚拟磁盘会失效,为保证永久生效,还需往/etc/fstab文件添加分区信息:)
再次使用 cat /proc/swaps 查看swap分区是否启动, 如下图已经为启动成功.
再次用 free -m 和 df -h 查看磁盘情况,可以看到 swap 交换区已经建立,磁盘相比一开始的容量减少了1.9G
PS:相关操作会导致额外的IO开销,特别是,如果内存使用率已经非常高,而同时IO性能也不是很好的情况下,该机制其实会起到相反的效果:不仅系统性能提升较小(因为内存使用率已经非常高了),而且由于频繁的内存到Swap的切换操作,会导致产生大量额外的IO操作,导致IO性能进一步降低,最终反而降低了系统总体性能。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。