SWAP介绍
SWAP指的是Linux系统中的虚拟内存,虚拟的意思就是"假的",它实际上并不是内存,而实际上是一块硬盘上的空间。当内存不足的时候,把这块硬盘空间拿来"救急"
所以SWAP的效率就依赖硬盘的读写速度,肯定比不上内存,所以如果过度使用的话可能会降低应用效率,毕竟不能把内存的活都丢给硬盘去干吧
增加SWAP虚拟内存
首先可以在系统中执行free -m
查看当前系统的虚拟内存,我试了一下我的几台VPS都没有预设SWAP
接下来要设置虚拟内存,需要注意的是,Linux系统下的虚拟内存实际上是去构建一个足够大的文件(分区),然后将这个文件标识为SWAP,然后就完成啦,很简单吧!
下面要做的就是构建这个文件,要构建一个具有一定大小的文件首先想到的当然就是dd
啦,这里我使用dd if=/dev/zero of=/var/swap/swapfile bs=1M count=2048
创建一个2GB的SWAP内存,其中if
和of
分别表示输入文件和输出文件,/dev/zero
是一个特殊文件,它提供了无限的零值(0x00)字节流,bs
表示写入的块大小,count
表示块的个数
dd
完之后可以使用ls -alh
或du -sh swapfile
查看构建的文件大小
$ mkdir /var/swap
$ cd /var/swap
$ dd if=/dev/zero of=/var/swap/swapfile bs=1M count=2048
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 4.57132 s, 470 MB/s
$ ls -alh /var/swap
drwxr-xr-x 2 root root 22 Dec 28 21:36 .
drwxr-xr-x 12 root root 151 Dec 28 21:33 ..
-rw-r--r-- 1 root root 2.0G Dec 28 21:36 swapfile
$ du -sh /var/swap/swapfile
2.0G swapfile
然后需要使用mkswap
和swapon
将创建好的目标文件标识为SWAP文件并激活,需注意在激活前最好将SWAP文件的权限设为600
,可以使用swapon -s
或free -m
查看SWAP是否已经启用
$ chmod 600 /var/swap/swapfile
$ mkswap /var/swap/swapfile
$ swapon /var/swap/swapfile
$ swapon -s
Filename Type Size Used Priority
/var/swap/swapfile file 2097148 280 -2
$ free -m
total use free shared buff/cache available
Mem: 928 188 71 0 668 602
Swap: 2047 0 2047
最后设置一下开机自启,需要在/etc/fstab
文件中加入下面一行代码
/var/swap/swapfile swap swap defaults 0 0
删除SWAP虚拟内存
首先需要用swapoff
停用虚拟内存
$ swapoff /var/swap/swapfile
然后将/etc/fstab
中添加的虚拟内存条目(/var/swap/swapfile swap swap defaults 0 0
)删除掉
最后直接删除掉SWAP文件即可
$ rm /var/swap/swapfile
查看并设置SWAP的使用时机
在Linux系统中,查看和设置SWAP的使用时机主要涉及到 vm.swappiness
参数的使用。vm.swappiness
是一个内核参数,它控制着操作系统将内存数据换入SWAP空间的倾向。其值可以从0
到100
,不同的值会影响系统如何使用SWAP空间
vm.swappiness
值的选择(默认通常为60
):
0
:意味着内核会尽量不使用SWAP空间,除非绝对必要
100
:意味着内核会更积极地使用SWAP空间,并更频繁地将数据移动到SWAP
要想查看vm.swappiness
的值可以使用sysctl
命令或直接cat
内核文件
$ cat /proc/sys/vm/swappiness
60
$ sysctl vm.swappiness
vm.swappiness = 60
- 要想临时更改
vm.swappiness
的值,可以使用如下命令
sysctl vm.swappiness=20 # 重启后失效
- 要永久更改
vm.swappiness
的值,需要编辑/etc/sysctl.conf
文件,并在末尾添加一行添加或修改下面的一行内容,然后重启或执行sysctl -p
命令后生效
vm.swappiness=20
写在最后
总之,SWAP对于内存比较小的机器还是很有用的,遵循小内存可以多设置点,大内存少设置点,2G内存以下的话可以设为内存的1-2倍,8G内存以上的话可以最好也不要设置超过4-8G