1、什么是 swap 分区
Linux中Swap(即:交换分区),类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。Android是基于Linux的操作系统,所以也可以使用Swap分区来提升系统运行效率 。
交换分区,英文的说法是swap,意思是“交换”、“实物交易”。它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行,和Windows的虚拟内存(pagefile.sys)的作用是一样的。
2、什么时候才会使用 swap 分区
其实是Linux通过一个参数swappiness来控制的。当然还涉及到复杂的算法。
这个参数值可为 0-100,控制系统 swap 的使用程度。高数值可优先系统性能,在进程不活跃时主动将其转换出物理内存。低数值可优先互动性并尽量避免将进程转换处物理内存,并降低反应延迟。默认值为 60。注意:这个只是一个权值,不是一个百分比值,涉及到系统内核复杂的算法。
修改这个权重
echo 10 > /proc/sys/vm/swappiness sysctl vm.swappiness=10 #临时修改
echo "vm.swappiness=10" >> /etc/sysctl.conf #永久修改
sysctl -p #生效
3、swap分区设置多大合适
关于这个问题,应该说只能有一个统一的参考标准,具体还应该根据系统实际情况和内存的负荷综合考虑,像ORACLE的官方文档就推荐如下设置,这个是根据物理内存来做参考的。
RAM | Swap Space |
Up to 512 MB | 2 times the size of RAM |
Between 1024 MB and 2048 MB | 1.5 times the size of RAM |
Between 2049 MB and 8192 MB | Equal to the size of RAM |
More than 8192 MB | 0.75 times the size of RAM |
4、如何创建 swap 分区
4.1、利用剩余磁盘创建分区来生成swap 分区
1,首先利用 fdisk 方式创建一个分区出来
参照https://www.yuque.com/docs/share/2ae867e2-a26d-483d-b670-e233f1d02c67?# 《第7章 Linux磁盘管理、使用》第5节
2,然后使用 mkswap 方式来格式化分区
mkswap /dev/sdb2
3,启动交换分区
swapon /dev/sdb2
4,设置成开机自动启动
echo "/dev/sdb2 swap swap defaults 0 0" >> /etc/fstab
4.2、利用剩余空间创建 swap 分区
- 创建一个目录,(可省略,但是不建议)
mkdir /swapdir && cd /swapdir
- 使用 dd 命令创建大小合适的的交换文件:
dd if=/dev/zero of=/swapdir/swapfile bs=1M count=1000
创建一个名为swapfile 的 1G 的交换文件,其中bs是每块的大小,count是块的数量;bs*count,就是swap文件的大小:这里1M*1024=1G。可以根据需要自行调整。
此外,swapfile是swap文件的路径,可以根据需求修改。
- 格式化此文件
mkswap /swapdir/swapfile
- 设置权限
chmod 600 /swapdir/swapfile
- 启用交换分区
swapon /swapdir/swapfile
- 设置开机自启动
echo "/swapdir/swapfile swap swap defaults 0 0" >> /etc/fstab
注意,路径还是要对应,而且必须是全路径。最后两个是零,不是大写字母O。
此项不是必须的。如果不修改开机启动配置,重启之后的swap空间会重置,之前配置丢失。
5、如何扩容 swap分区
只需要按照上面步骤创建 swap 分区,挂载上去之后就自动扩容上去了
6、如何缩减 swap 分区
- 用下面命令查看下当前 swap 分区上面挂载了那些磁盘
swapon -s / cat /proc/swaps
- 关闭对应的 swap 分区
swapoff /dev/sdb2
1、创建512M的空文件 dd if=/dev/zero of=/opt/swapfile bs=1M count=512
#此处设置为8G,如下:
dd if=/dev/zero of=/opt/swapfile bs=1M count=8096
2、格式化为交换分区 mkswap /opt/swapfile
3、设置权限 chmod 600 /opt/swapfile
4、挂载交换分区 swapon /opt/swapfile
如果guazai交换分区出现如下参数错误,
swapon: stat 失败:swap: 没有那个文件或目录,
解决办法:
重新制作为交换分区
/sbin/mkswap /opt/swapfile,
然后继续挂载交换分区即可
/sbin/swapon /opt/swapfile
5、查看交换分区大小 free
如果要去掉新增加的swap文件,使用 swapoff /tmp/swap1即可。
[root@oracle u01]# dd if=/dev/zero of=/opt/swapfile bs=1024 count=1048576
1048576+0 records in
1048576+0 records out
1073741824 bytes (1.1 GB) copied, 5.87728 s, 183 MB/s
[root@oracle u01]# mkswap /opt/swapfile
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=e338be1a-852c-444c-8108-e56428828740
[root@oracle u01]# sudo chmod 600 /swapfile
[root@oracle u01]# swapon /swapfile
[root@oracle u01]# free -h
total used free shared buff/cache available
Mem: 31G 2.1G 19G 102M 9.4G 28G
Swap: 16G 0B 16G
[root@oracle u01]# vim /etc/fstab
...
/swapfile swap swap default 0 0