Linux系统中swap分区的设置与增加/删除

吾爱主题 阅读:178 2024-04-05 13:54:18 评论:0

1. 什么是swap分区

Swap分区在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。swap分区是从磁盘空间划分而来,有的是单独使用一个分区,有的是把一个大文件当做swap。

2. 官方关于swap设置

Redhat6.4 官方推荐(我们使用CentOS 6.4)

推荐的系统交换空间

系统中的RAM数量   建议交换空间      如果允许休眠,建议使用交换空间
⩽2GB               RAM的2倍                 RAM数量的3倍
> 2GB - 8GB      等于RAM的数量               RAM的2倍
> 8GB - 64GB        至少4 GB                 RAM的1.5倍
> 64GB              至少4 GB                  不建议休眠

因为有些系统会允许休眠状态,如果不设置swap会无法启动,就像windows系统使用休眠设置虚拟内存一样。

Mysql 5.6 和5.7的建议

mysql5.6

是说在物理内存足够的情况下,可以删除swap,因为系统在有些情况下会及时内存够用使用swap,若使用会因为I/0变高导致mysql故障。Mysql建议删除。

oracle建议

另外在其它博客中看到下面一个推荐设置,当然我不清楚其怎么得到这个标准的。是否合理也无从考证。可以作为一个参考。
4G以内的物理内存,SWAP 设置为内存的2倍。

4-8G的物理内存,SWAP 等于内存大小。

8-64G 的物理内存,SWAP 设置为8G。

64-256G物理内存,SWAP 设置为16G。

当然这么多建议标准,很让人无所适从,不知道该怎么设置。其实根据系统实际情况和内存的负荷综合考虑,但是实际情况又是什么样呢?

个人建议从如下几个考虑:

  • 物理内存空间是否在峰值也可以满足要求,不满足建议设置swap防止内存溢出导致主机宕机,当然设置不宜过大,占用磁盘空间。
  • 磁盘I/O是否足够,使用磁盘I/O值过低或者其他业务要求高,不建议设置swap。由于使用swap需要频繁写入磁盘,使用固态磁盘不建议设置。
  • 服务器安装的具体的应用,比如Mysql等不推荐设置,可以不设置或者修改参数swappiness来控制的,默认值为 60意思是说在内存使用40%的情况下就使用swap空间,可以将值设置为10 或者设置0,优先使用物理内存。

3. 如何增加或者删除swap分区

1、查看swap空间和使用情况

?
1 2 3 4 5 6 7 8 [root@localhost-zabbix ~] # swapon -s Filename    Type  Size Used Priority /dev/dm-1        partition 2097144 0 -1 [root@localhost-zabbix ~] # free -m      total  used  free  shared buffers  cached Mem:   1877  565  1311   0  132  188 -/+ buffers /cache :  244  1632 Swap:   2047   0  2047

2、关闭swap

?
1 2 3 [root@localhost-zabbix ~] # swapoff /dev/dm-1 [root@localhost-zabbix ~] # swapon -s Filename  Type  Size Used Priority

3、启用之前关闭分区

?
1 2 3 4 [root@localhost-zabbix ~] # swapon /dev/dm-1 [root@localhost-zabbix ~] # swapon -s Filename    Type  Size Used Priority /dev/dm-1        partition 2097144 0 -1

4、缩小Swap分区

如果是增大Swap分区大小,那么就需要扩展正在使用的swap分区的逻辑卷,此处使用lvreduce命令收缩逻辑卷

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@getlnx14uat ~] # lvreduce -L 8G /dev/mapper/VolGroup00-LogVol01   WARNING: Reducing active logical volume to 8.00 GB   THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce LogVol01? [y /n ]: y   Reducing logical volume LogVol01 to 8.00 GB   Logical volume LogVol01 successfully resized [root@getlnx14uat ~] # mkswap /dev/mapper/VolGroup00-LogVol01 #格式化 Setting up swapspace version 1, size = 8589930 kB [root@getlnx14uat ~] # swapon -s Filename        Type   Size Used Priority [root@getlnx14uat ~] # swapon /dev/mapper/VolGroup00-LogVol01 [root@getlnx14uat ~] # swapon -s Filename        Type   Size Used Priority /dev/mapper/VolGroup00-LogVol01   partition  8388600 0  -1

5、增大swap空间

如果磁盘还有剩余未分配空间可以新分区swap或者增大之前的swap

如果没有磁盘未分配,可以新建分区文件,来增大swap

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [root@localhost-zabbix ~] # dd if=/dev/zero of=/home/swap bs=1024 count=1024000 记录了1024000+0 的读入 记录了1024000+0 的写出 1048576000字节(1.0 GB)已复制,2.69212 秒,389 MB/秒 [root@localhost-zabbix ~] # df -h Filesystem        Size Used Avail Use% Mounted on /dev/mapper/vg_localhostzabbix-lv_root 18G 4.7G 12G 29% / tmpfs         939M  0 939M 0% /dev/shm /dev/sda1        485M 33M 427M 8% /boot [root@localhost-zabbix ~] # mkswap /home/swap mkswap: /home/swap : warning: don't erase bootbits sectors    on whole disk. Use -f to force. Setting up swapspace version 1, size = 1023996 KiB no label, UUID=74c16b0d-7d88-4384-b41e-b12cc93d4bbf [root@localhost-zabbix ~] # cd /home/ [root@localhost-zabbix home] # ls swap [root@localhost-zabbix home] # mkswap swap mkswap: swap: warning: don't erase bootbits sectors    on whole disk. Use -f to force. Setting up swapspace version 1, size = 1023996 KiB no label, UUID=7677912c-b337-4e83-9003-b736dec93d31 [root@localhost-zabbix home] # free -m      total  used  free  shared buffers  cached Mem:   1877  1611  265   0  135  1192 -/+ buffers /cache :  283  1593 Swap:   2047   0  2047 [root@localhost-zabbix home] # swapon swap [root@localhost-zabbix home] # free -m      total  used  free  shared buffers  cached Mem:   1877  1612  265   0  135  1192 -/+ buffers /cache :  284  1592 Swap:   3047   0  3047 [root@localhost-zabbix home] # swapon -s Filename    Type  Size Used Priority /dev/dm-1        partition 2097144 0 -1 /home/swap        file  1023992 0 -2

我们可以看到上面是有分区文件的方式增大了swap空间。但是这里还有个问题就是重启系统以后swap还是会变回去,这里需要修改/etc/fstab

增加:/home/swap swap swap default 0 0

删除刚刚增加swap

?
1 2 3 4 swapoff /home/swap rm -rf /home/swap vi /etc/fstab /home/swap swap swap default 0 0

是有新的分区新建swap:

使用fdisk来创建交换分区(假设 /dev/sdb2 是创建的交换分区)

?
1 2 3 4 mkswap /dev/sdb2 swapon /dev/sdb2 vi /etc/fstab /dev/sdb2 swap swap defaults 0 0

6、修改swappiness

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 swappiness参数值说明 vm.swappiness = 0 仅在内存不足的情况下--当剩余空闲内存低于vm.min_free_kbytes limit时,使用交换空间。 vm.swappiness = 1 内核版本3.5及以上、Red Hat内核版本2.6.32-303及以上,进行最少量的交换,而不禁用交换。 vm.swappiness = 10当系统存在足够内存时,推荐设置为该值以提高性能。 vm.swappiness = 60默认值 vm.swappiness = 100 内核将积极的使用交换空间 # sysctl -a | grep vm.swappiness 查看swappiness vm.swappiness = 30 # echo 10 > /proc/sys/vm/swappiness 临时修改 # sysctl -a | grep vm.swappiness # vm.swappiness = 10 # sysctl -w vm.swappiness=10 临时修改 vm.swappiness = 10 # cat /proc/sys/vm/swappiness 10 /etc/sysctl .conf中编辑,增加如下参数(如果存在的话) vm.swappiness = 10 永久修改 需要重启

特别注意:

在不影响业务和系统,物理内存足够情况下,优先建议使用最后一种修改swappiness这样可以保证在优先使用物理内存而在物理内存不足的情况下使用swap防止内存溢出。根据查询资料建议设置值10

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。

原文链接:https://www.jianshu.com/p/af494c090586

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容