Ubuntu系统调整Swap交换文件大小
什么是Swap分区
Swap分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中
系统安装时自动创建的swap交换文件只有1G,然而跑编译的时候一直会提示错误,后来才发现是交换文件太小了,需要另外再增加一些swap交换文件的大小。
查看Swap文件大小
free -m
m 是以兆为单位, g是以GB为单位, 默认是kb
我们可以看到默认配置的swap文件是2G,如果是用来编译处理大数据的话肯定是不够用的。
创建目录和SWAP文件
在相应目录下创建一个存放swap文件的文件夹 并进入该目录
sudo mkdir /home/swapfile
cd home/swapfile
用dd命令创建swap文件
用dd命令创建一个2G的交换空间文件
sudo dd if=/dev/zero of=swap bs=1G count=2
dd 命令解释
dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指的转换。
注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2
参数注释:
1 if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
2 of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
3 ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
4 cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
5 skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
6 seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。
7 count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
8 conv=conversion:用指定的参数转换文件。
ascii:转换ebcdic为ascii
ebcdic:转换ascii为ebcdic
ibm:转换ascii为alternate ebcdic
block:把每一行转换为长度为cbs,不足部分用空格填充
unblock:使每一行的长度都为cbs,不足部分用空格填充
lcase:把大写字符转换为小写字符
ucase:把小写字符转换为大写字符
swab:交换输入的每对字节
noerror:出错时不停止
notrunc:不截短输出文件
sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
转换swap文件
sudo mkswap -f swap
激活swap文件
sudo swapon swap
有时候会出现报错 swapon: /swapfile: insecure permissions 0644, 0600 suggested.
此时需要将swap文件修改权限为644 或者600即可
chmod 644 swap
永久激活swap
编辑 fstab 文件
sudo nano /etc/fstab
在最后加上之前创建的swap文件路径和参数,重启后就正常加载swap文件了
/home/swapfile/swap none swap defaults 0 0
查看swap文件状态
swapon
会将所有的swap文件位置都列出来
再次查看状态
free -m
此时已经正常显示交换文件大为4G。
停止swap交换文件
sudo swapoff /home/swapfile/swap
删除交换文件
sudo rm /home/swapfile/swap
