因为有优惠,入手了一个阿里云2核0.5G的香港服务器,0.5G的运存能干什么,肯定要加上SWAP
虚拟内存啊(添加SWAP虚拟内存教程摸这里)。但添加完之后发现虚拟内存一直没有被使用,经过查询发现内核参数vm.swappiness
是控制虚拟内存使用权重的,这个阿里云服务器默认swappiness=0
,所以虚拟内存一直没有被使用。记录一下解决过程:
内核参数vm.swappiness
控制换出运行时内存的相对权重,参数值大小对如何使用swap
分区有很大联系。值越大,表示越积极使用swap
分区,越小表示越积极使用物理内存。默认值swappiness=60
,表示内存使用率超过100-60=40%
时开始使用交换分区。swappiness=0
的时候表示最大限度使用物理内存,然后才是swap
空间;swappiness=100
的时候表示积极使用swap
分区,并把内存上的数据及时搬运到swap
空间。(网上有的说,对于3.5以后的内核和RedHat 2.6.32之后的内核,设置为0会禁止使用swap
,从而引发out of memory
,这种情况可以设置为1。)
需要根据服务器运行的程序类型,来设置不同的参数值。例如,对于Oracle
一般设置为10;对于MySQL
一般设置为1,尽可能不用swap
分区。
调整vm.swappiness
的方法,我这里设置为默认值60:
1、查看参数值:
cat /proc/sys/vm/swappiness
2、临时调整:
sysctl vm.swappiness = 60
cat /proc/sys/vm/swappiness
3、永久调整:
vim /etc/sysctl.conf
修改vm.swappiness=60
,然后加载参数(使用这条命令不必重启即可生效):
sysctl -p
可以再使用cat /proc/sys/vm/swappiness
查看一下是否修改成功,现在可以愉快的使用虚拟内存了😉
4、刷新SWAP
如果你已经使用了swap
,里面已经有了数据,那当修改了vm.swappiness
参数之后就不会立即看到效果,如果不想重启,可以使用以下命令刷新swap
:
swapoff -a && swapon -a
swapoff -a
:系统将停止使用交换空间,所有的交换数据会被清空(或者重新加载到物理内存中),
swapon -a
:用于重新启用系统中的所有交换空间,启用后会按照新设定的vm.swappiness
来使用交换分区。
Comments NOTHING