当前位置: 首页 > Linux

Linux系统的swap分区

时间:2023-04-06 04:14:07 Linux

什么是swap分区?当系统的物理内存不够用时,swap分区会释放一部分物理内存给当前运行的程序使用。释放出来的空间可能来自于一些很久没有运行的程序。这些释放出来的空间暂时保存在Swap分区中,当那些程序要运行时,保存的数据从Swap分区恢复到内存中。交换分区是从磁盘空间中划分出来的。有些使用单个分区,有些使用大文件作为交换。官方关于交换设置Redhat6.4官方推荐(我们使用CentOS6.4)建议系统交换空间建议系统内存量8GB等于内存量的2倍内存>8GB-64GB至少是4GB内存的1.5倍>64GB至少4GBHibernation不推荐,因为有的系统会允许休眠,如果不设置swap,将无法启动,就像windows系统使用hibernation设置虚拟内存一样。Mysql5.6和5.7的建议是,如果物理内存足够,可以删除swap,因为系统在某些情况下内存足够的时候会及时使用swap,如果使用了,会导致mysql失败,因为到I/O变高。mysql建议删除。另外,在其他博客中看到了如下推荐设置。当然,我不知道它是如何得到这个标准的。是否合理,无从考证。可以作为参考。对于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%时使用交换空间,该值可以设置为10或设置为0,优先使用物理内存。如何添加或删除swap分区查看swap空间和使用情况[root@localhost-zabbix~]#swapon-sFilenameTypeSizeUsedPriority/dev/dm-1partition20971440-1[root@localhost-zabbix~]#free-m总使用的空闲共享缓冲区cachedMem:187756513110132188-/+缓冲区/缓存:2441632Swap:204702047closeswap[root@localhost-zabbix~]#swapoff/dev/dm-1[root@localhost-zabbix~]#swapon-sFilenameTypeSizeUsedPriority在启用之前关闭分区[root@localhost-zabbix~]#swapon/dev/dm-1[root@localhost-zabbix~]#swapon-sFilenameTypeSizeUsedPriority/dev/dm-1partition20971440-1收缩Swap分区如果想增加Swap分区的大小,需要扩展正在使用的swap分区的逻辑卷,这里使用lvreduce命令收缩逻辑volume[root@getlnx14uat~]#lvreduce-L8G/dev/mapper/VolGroup00-LogVol01警告:减少活动l逻辑卷到8.00GB这可能会破坏您的数据(文件系统等)您真的要减少LogVol01吗?[y/n]:y将逻辑卷LogVol01减少到8.00GB逻辑卷LogVol01成功调整大小[root@getlnx14kswap~]/dev/mapper/VolGroup00-LogVol01#Format设置交换空间版本1,大小=8589930kB[root@getlnx14uat~]#swapon-sFilename使用的类型大小优先级[root@getlnx14uat~]#swapon/dev/mapper/VolGroup00-LogVol01[root@getlnx14uat~]#swapon-sFilename使用的类型大小优先级/dev/mapper/VolGroup00-LogVol01partition83886000-1增加swap空间如果磁盘有剩余未分配空间,可以新建分区或者增加之前的swap如果没有磁盘未分配,可以新建分区文件增加swap[root@localhost-zabbix~]#ddif=/dev/zeroof=/home/swapbs=1024count=1024000recordedthereadof1024000+0Incomingrecorded1024000+0writeout1048576000bytes(1.0GB)copied,2.69212sec,389MB/sec[根@localhost-zabbix~]#df-hFilesystemSizeUsedAvailUse%Mountedon/dev/mapper/vg_localhostzabbix-lv_root18G4.7G12G29%/tmpfs939M0939M0%/dev/shm/dev/sda1485M33M427M8%/boot[root@localhost-zabbix~]#mkswap/home/swapmkswap:/home/swap:警告:不要擦除整个磁盘上的引导位扇区。使用-f强制。设置交换空间版本1,大小=1023996KiBno标签,UUID=74c16b0d-7d88-4384-b41e-b12cc93d4bbf[root@localhost-zabbix~]#cd/home/[root@localhost-zabbixhome]#lsswap[root@localhost-zabbixhome]#mkswapswapmkswap:swap:warning:不要擦除整个磁盘上的引导位扇区。使用-f强制设置交换空间版本1,大小=1023996KiBno标签,UUID=7677912c-b337-4e83-9003-b736dec93d31[root@localhost-zabbixhome]#free-mtotalusedfreesharedbufferscachedMem:1877161126501351192-/+buffers/cache:2831593Swap:204702047[root@localhost-zabbixhome]#swaponswap[root@localhost-zabbixhome]#free-mtotalusedfreesharedbufferscachedMem:1877161226501351192-/+buffers/cache:2841592Swap:304703047[root@localhost-zabbixhome]#swapon-sFilenameTypeSizeUsedPriority/dev/dm-1partition20971440-1/home/swapfile10239920-2us可以看出上面是有分区文件增加swap空间但是这里还有一个问题。重启系统后swap还是会变回来。这里需要修改/etc/fstab添加:/home/swapswapswapdefault00删除刚刚添加的swapswapoff/home/swaprm-rf/home/swapvi/etc/fstab/home/swapswapswapdefault00isanewpartitionNewswap:使用fdisk创建一个swap分区(假设/dev/sdb2是创建的swap分区)mkswap/dev/sdb2swapon/dev/sdb2vi/etc/fstab/dev/sdb2swapswapdefaults00修改swappinessswappiness参数值说明vm.swappiness=0仅在内存不足的情况下——当剩余空闲内存低于vm.min_free_kbytes限制时,使用交换空间。vm.swappiness=1内核版本3.5及以上,RedHat内核版本2.6.32-303及以上,执行最小交换而不禁用交换。vm.swappiness=10当系统内存足够时,建议设置该值以提高性能。vm.swappiness=60默认值vm.swappiness=100内核将主动使用交换空间#sysctl-a|grepvm.swappiness查看swappinessvm.swappiness=30#echo10>/proc/sys/vm/swappiness临时修改#sysctl-a|grepvm.swappiness#vm.swappiness=10#sysctl-wvm.swappiness=10临时修改vm.swappiness=10#cat/proc/sys/vm/swappiness10在/etc/sysctl.conf中编辑,添加如下参数(如果存在)vm.swappiness=10永久修改需要重启特别注意:在业务和系统不受影响,且物理内存充足的情况下,建议使用swappiness的最后一次修改,保证物理首先使用内存。当物理内存不足时,使用swap来防止内存溢出。建议根据查询数据将该值设置为10