我为了省钱在阿里云买了一台最低配的主机(1 Core 512M RAM),但是内存实在太低了,为了能够好好的运行 Java 程序(无奈 Java 吃内存太狠了),所以利用 Linux 天然自带的 swap
技术进行开启内存交换空间,从而达到扩大内存的目的,这样就能省下不少银子了。
注意:本篇不会讲述 swap 的原理,不理解的朋友可以自己查阅一下
什么是 Linux swap 交换内存
相关资料。
开始
我这里虚拟了 2G
的容量进行内存扩容,然后 swap
使用的利用率比例为 60
,即:当物理内存剩下 60%
时使用 swap
进行交换。
临时配置
临时配置是指重启之后会失效,仅仅只是保持本次开机起作用。
分配文件空间
建立一个 2048M 的 swap 所需的文件空间
dd if=/dev/zero of=/var/blockd.swap bs=1M count=2048
文件 Swap 格式化
mkswap /var/blockd.swap
Swap 激活
swapon /var/blockd.swap
Swap 挂载
打开 /etc/fstab
文件编辑追加以下内容
/var/blockd.swap swap swap default 0 0
修改 Swap 利用率
sysctl vm.swappiness=60
挂载生效
mount -a
永久配置
永久配置是指重启之后依然保持生效。
分配文件空间
建立一个 2048M 的 swap 所需的文件空间
dd if=/dev/zero of=/var/blockd.swap bs=1M count=2048
文件 Swap 格式化
mkswap /var/blockd.swap
Swap 设置自激活
由于 /etc/rc.local
文件会优先于 /etc/fstab
执行,所以在文件 /etc/rc.local
里面增加下面一行命令
swapon /var/blockd.swap
Swap 挂载
打开 /etc/fstab
文件编辑追加以下内容
/var/blockd.swap swap swap default 0 0
修改 Swap 利用率
编辑 /etc/sysctl.conf
实现永久生效
vm.swappiness=60
重启生效
更多命令
Swap 查看
swapon -s
Swap 关闭
swapoff /var/blockd.swap
查看 Swap 利用率
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