阿里云服务器默认没有开启虚拟内存,经常遇到软件内存不足,运行崩溃的情况。
为了减少购买昂贵的内存资源,可以暂时使用虚拟内存代替(根据运行的程序需求,性能会降低一些)
Swap分区的创建
1、查看内存使用情况
free -h
显示只有系统内存,还未创建虚拟内存。
2、创建虚拟内存磁盘卷
使用dd
命令创建名为swapfile
的swap交换文件(文件名和目录任意):
dev/zero
是Linux的一种特殊字符设备(输入设备),可以用来创建一个指定长度用于初始化的空文件,如临时交换文件,该设备无穷尽地提供0,可以提供任何你需要的数目。
bs=1024
:单位数据块(block)同时读入/输出的块字节大小为1024个字节即1KB,bs(即block size)。
count = 4194304 表示的是4G
执行完命令后,会进行4G读写操作,所以会有一些卡顿,耐心等待即可
dd if=/dev/zero of=/dev/swapfile bs=1024 count=4194304
3、对交换文件格式化并转换为swap分区
mkswap /dev/swapfile
4、启用虚拟内存服务
swapon /dev/swapfile
执行以上命令可能会出现:“不安全的权限 0644,建议使用 0600”类似提示,不要紧张,实际上已经激活了,可以忽略提示
swapon: /dev/swapfile: insecure permissions 0644, 0600 suggested.
也可以听从系统的建议修改下权限:
chmod -R 0600 /dev/swapfile
5、查看新swap分区是否正常添加并激活使用
free -h
可以看到已经多出了一个4G的Swap空间
6、修改 fstab 配置,设置开机自动挂载该分区
echo "/dev/swapfile swap swap defaults 0 0" >> /etc/fstab
7、查看是否已经使用了交换内存
top
可以看到已经在使用了
Swap的配置更改
一般默认的情况,当我们开启交换虚拟内存空间后,默认好像是当内存使用百分50的时候,就会开始使用交换空间,这样就会造成一个情况,就是本身物理内存还没有使用完成, 缺去使用虚拟内存,这样肯定会影响我们的使用效率,那么我们怎么避免这个情况的发生呢?
答案就是:可以通过swappiness
值进行管理,swappiness
表示系统对Swap分区的依赖程度,范围是0~100
,数值越大,依赖程度越高,也就是越高越会使用Swap分区。
所以,我们现在并不希望我们的机器过度依赖Swap分区,只有当我们负载超过某个百分比的时候,才使用交换空间,所以这也决定了,我们这个值并不是非常大,一般设置 10 ~50
左右。
当然如果是SSD的话,那么这个值可以稍微大一些。
1、查看当前的swappiness数值:
cat /proc/sys/vm/swappiness
2、修改swappiness值,以10为例:
sysctl vm.swappiness=10
3、设置永久有效,重启系统后生效
echo "vm.swappiness = 10" >> /etc/sysctl.conf
swap分区的删除
swap分区的删除,仅用于以后删除分区时候使用,如果你现在是增加虚拟内存,那么可以忽略这一步
1、停止正在使用swap分区
swapoff /dev/swapfile
2、删除swap分区文件
rm -rf /dev/swapfile
3、删除或注释掉我们之前在fstab文件里追加的开机自动挂载配置内容
vim /etc/fstab
#把下面内容删除或注释掉
/dev/swapfile swap swap defaults 0 0
swap分区的移动
如果当前的虚拟内存所在的磁盘空间不够,可以首先关闭虚存服务,将其移动到别的磁盘,再启用即可。
swapoff /dev/swapfile #关闭使用的分区
mv /dev/swapfile /mnt/swap #移动当前的swap分区到/mut(别的磁盘)/dev
swapon /dev/swapfile #开启移动后swap分区
评论区