swap分区也就是交换分区,当物理内存不够用的时候,会将内存中一些暂时不用的数据存放到swap分区中,会加大系统io,同时造的成大量页的换进换出,影响系统的性能,所以在物理内存充足时,我们可以设置尽量不实用交换分区,或者去掉交换分区,当内存空间很小时,例如,只有1G时,则很有必要设置交换分区。
创建swap有多种方式,一种是在装系统的时候创建好,一种是创建一个单独的分区用来做swap分区,一种是直接使用dd创建一个swap文件。我们这里使用交换文件的方式,比较简单。
设置交换分区的大小
1 | dd if=/dev/zero of=/mnt/swap bs=1M count=1024 |
---|
1 | swapon /mnt/swap |
---|
设置开机自动挂载
1 2 3 | vim /etc/fstab 增加 /mnt/swap swap swap defaults 0 0 |
---|
使用交换分区的条件是什么?我们可以通过查看swappiness文件
1 2 | $ cat /proc/sys/vm/swappiness 60 |
---|
很多系统默认都是60,即当内存剩余空间不足60%时,便使用swap,这对于内存很大的系统来说,很不方便,所以我们要修改它的默认值
1 | sudo sysctl vm.swappiness=10 |
---|
但是,这只是临时生效,重启后便又恢复到默认值,我们需要修改配置文件
1 2 3 4 | sudo vim /etc/sysctl.conf vm.swappiness=10 sudo sysctl -p |
---|
注:
1 2 3 4 | swappiness=0:表示只使用物理内存,不使用swap,当物理内存用光时,用OOM kill杀死分值低的进程。 swappiness=1:表示当物理内存用光时,使用swap内存,不杀死相关进程。 swappiness=60:系统默认值。 swappiness=100:表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。 |
---|
1)强制将缓冲区中的数据写入磁盘
1 2 | sync #系统会周期性的sync数据到磁盘 |
---|
2)清除缓存
这一步不是必须的,要根据内存剩余空间来执行,如果剩余空间远大于swap空间,则不需要
1 2 3 4 5 6 | 清空页缓存 echo 1 > /proc/sys/vm/drop_caches 清空inode和目录树缓存 echo 2 > /proc/sys/vm/drop_caches 清空所有缓存 echo 3 > /proc/sys/vm/drop_caches |
---|
3)释放swap
1 2 | swapoff -a #需要等待,由swap的大小决定,如果很大,例如16G,则可能要等待十几个小时 swapon -a |
---|
1 2 3 4 5 6 7 | $ vmstat 1 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 480336 18652 463836 0 0 42 28 195 368 0 0 99 0 0 0 0 0 480292 18652 463836 0 0 0 0 26 39 0 0 100 0 0 0 0 0 480292 18652 463836 0 0 0 0 29 40 0 0 100 0 0 0 0 0 480292 18652 463836 0 0 0 0 19 34 0 0 100 0 0 |
---|
si和so分别代表swap的换入换出