阿里云 ECS Ubuntu 16.04 创建 Swap 分区

我为了省钱在阿里云买了一台最低配的主机(1 Core 512M RAM),但是内存实在太低了,为了能够好好的运行 Java 程序(无奈 Java 吃内存太狠了),所以利用 Linux 天然自带的 swap 技术进行开启内存交换空间,从而达到扩大内存的目的,这样就能省下不少银子了。

注意:本篇不会讲述 swap 的原理,不理解的朋友可以自己查阅一下 什么是 Linux swap 交换内存 相关资料。

开始

我这里虚拟了 2G 的容量进行内存扩容,然后 swap 使用的利用率比例为 60,即:当物理内存剩下 60% 时使用 swap 进行交换。

临时配置

临时配置是指重启之后会失效,仅仅只是保持本次开机起作用。

分配文件空间

建立一个 2048M 的 swap 所需的文件空间

1
dd if=/dev/zero of=/var/blockd.swap bs=1M count=2048

文件 Swap 格式化

1
mkswap /var/blockd.swap

Swap 激活

1
swapon /var/blockd.swap

Swap 挂载

打开 /etc/fstab 文件编辑追加以下内容

1
/var/blockd.swap swap swap default 0 0

修改 Swap 利用率

1
sysctl vm.swappiness=60

挂载生效

1
mount -a

永久配置

永久配置是指重启之后依然保持生效。

分配文件空间

建立一个 2048M 的 swap 所需的文件空间

1
dd if=/dev/zero of=/var/blockd.swap bs=1M count=2048

文件 Swap 格式化

1
mkswap /var/blockd.swap

Swap 设置自激活

由于 /etc/rc.local 文件会优先于 /etc/fstab 执行,所以在文件 /etc/rc.local 里面增加下面一行命令

1
swapon /var/blockd.swap

Swap 挂载

打开 /etc/fstab 文件编辑追加以下内容

1
/var/blockd.swap swap swap default 0 0

修改 Swap 利用率

编辑 /etc/sysctl.conf 实现永久生效

1
vm.swappiness=60

重启生效

更多命令

Swap 查看

1
swapon -s

Swap 关闭

1
swapoff /var/blockd.swap

查看 Swap 利用率

1
cat /proc/sys/vm/swappiness

参数解释

vm.swappiness

这个参数主要用来表示物理内存还剩多大比例才开始使用内存交换,本文中设置的值为 60 即当物理内存还剩 60% 时开始进行内存交换;这里有一篇英文相关解释:https://askubuntu.com/questions/969065/why-is-swap-being-used-when-vm-swappiness-is-0

最后

关于为什么阿里云的 ECS 关闭了 Swap ,网上很多观点均是因为阿里云为了保护磁盘而默认进行了关闭(其实交换空间频繁读写实际就是对硬盘的操作),反正我们实现我们想要的就可以了,至于损耗嘛就是官方需要考虑的问题了;关于性能的话根据阿里云的磁盘读写速度文档表明 高效云盘 能够达到 130m/s 的读写速度,比老式机械 70m/s 高了不少,凑合着用吧,如果不满于高效云盘的可以考虑 SSD 那这样的话价格也会不同,自己做一下价格对比吧!!!

参考文档

https://www.deeplearn.me/1032.html
https://www.jianshu.com/p/44220d83bfc3