linux 增加虚拟内存swap文件

linux 增加虚拟内存swap(使用文件)

1、简介

如果你的服务器的总是报告内存不足,并且时常因为内存不足而引发服务被强制kill的话,在不增加物理内存的情况下,启用swap交换区作为虚拟内存是一个不错的选择。    

 虚拟内存一般设置为物理内存的1/2倍即可。

2、新增swap分区

  由于服务器已经安装了各种软件,懒得重新给硬盘分区,所以这里使用文件作为swap分区 ,下面操作需要在root用户下操作

 

  使用 free -h 查看当前内存占用情况,可以看到物理内存所剩无几,下面的swap也是使用的文件作为虚拟内存使用的

 

  创建要作为swap分区的文件:增加1GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小),如下面是2G

  # dd if=/dev/zero of=/root/swapfile2 bs=1M count=2048

  

  这里我使用的of/root/swapfile2 ,可以看到该文件是新创建的,这时候这个文件还不能直接使用为swap文件

 

  修改文件权限,如不修改,在启用swap文件的时候会提示下面信息(不影响使用,建议修改)

  # chmod 0600 /root/swapfile2

 

  格式化为交换分区文件,建立swap的文件系统,/root/swapfile2需要与上面的of的值一致,这个目录可以自定义

  # mkswap /root/swapfile2

   

  启用swap文件:

  # swapon /root/swapfile2

  

  可以看到未启用时虚拟内存为2G,启用后内存增加了2G

 

  使系统开机时自启用

  # vim /etc/fstab

 

  在文件/etc/fstab中添加一行

/root/swapfile2 swap swap defaults 0 0

 

为了避免上面发生的事故,在修改过fstab文件后,都要使用命令mount -a进行挂载测试,没有报错信息说明fstab文件没有问题。否则根据报错解决问题。

#mount -a

 

3、调整swap空间使用的优先级

  如果内存够大,应当告诉 linux 不必太多的使用 SWAP 分区, 可以通过修改 swappiness 的数值。

  swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

  各个操作系统的优先级可能都不一样,如果不调整,你会发现添加的虚拟内存几乎没有用到

 

  查看当前swappiness

  # cat /proc/sys/vm/swappiness

 

  修改swappiness值为60(临时修改,重启后即还原为默认值)

  # sudo sysctl vm.swappiness=60

 

  永久修改swappiness默认值(重启生效)

  # vim /etc/sysctl.conf

  找到vm.swappiness ,如果没有则需要手动添加一行  vm.swappiness = 30 保存即可

需要注意的是btrfs,可能无法添加swap分区,需要更高版本的kernel 5.0支持。

drop_caches的值可以是0-3之间的数字,代表不同的含义
0:不释放(系统默认值)
1:释放页缓存
2:释放dentries和inodes
3:释放所有缓存

找到vm.drop_caches = 0 ,如果没有则需要手动添加一行  vm.drop_caches = 3 保存即可. 

#sysctl -p 

 

先,查看/proc/sys/vm/drop_caches的值

# cat /proc/sys/vm/drop_caches

0值默认为0

 

然后,运行sync命令

# sync

手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)

标签
菜单分类