在Linux系统中,swap空间(通常称为swap分区)是一个用于补充内存资源的重要组件。当系统的物理RAM不足时,Linux会将一部分不经常使用的内存页面移动到硬盘上的swap空间中,这个过程被称为分页(paging)或交换(swapping)。这样可以为更重要的进程腾出物理内存,从而保持系统的高效运行。
平时我们没太注意swap分区的作用以及如何扩容等操作,接下来进行详解。
swap分区大小设置规则,在生产环境中,交换分区的大小一般为真实物理内存的1.5~2倍,在Linux系统,我们可以参照Redhat公司为RHEL5、RHEL6推荐的SWAP空间的大小划分原则,在你没有其他特别需求时,可以作为很好的参考依据:
1、内存小于4GB时,推荐不少于2GB的swap空间;
2、内存4GB~16GB,推荐不少于4GB的swap空间;
3、内存16GB~64GB,推荐不少于8GB的swap空间;
4、内存64GB~256GB,推荐不少于16GB的swap空间。
1、例如安装MySQL、Elastic、K8S等相对吃性能的服务和软件,通常建议就是执行swapoff -a关闭swap分区,从而提高性能。
没有了Swap分区,直接使用物理内存,从而减少磁盘IO的交互次数,提高性能.
2、现在内存卡很便宜, 说实在的, 控制程序使用内存合理, 从而避免OOM的方式相对比使用Swap来避免更为高效。
出于某些原因,例如自己为了省钱买了国外的服务器1-2G内存, 像运行更多的程序,但是仅仅使用物理内存有不够,那么可以稍微扩容一下swap分区,能够支撑程序运行起来。
虽然性能会差一点,但是总归程序能跑起来吧,也能将就用一下。
fdisk /dev/sdc
划分一个分区出来,大小自己定。例如我们的swap本来只有2G,现在想扩容后到4G,需要再扩2G. 所以再分一个2G分区出来:
此时分区默认的ID是83
我们可以查看fdisk的-l命令,看到分区类型不同ID代表的含义,82是swap分区类型的ID,需要改为82, 默认是83:
执行t, 输入分区编号, 输入83, 最后w保存即可。
和普通分区一样,要使用,需要进行格式化分区的文件系统,最后才能挂载使用。swap分区也是如此,只不过不再使用mkfs命令而是mkswap进行格式化。
mkswap /dev/sdc1
临时挂载swap分区进行扩容:
swapon /dev/sdc1
查看扩容后的结果:
修改/etc/fstab,将挂载命令写入即可,重启后才能正常应用,否则每次需要手动挂载.
这个需求比较有意思。 情况是这样的,我购买的云服务器只有一个盘,这个盘还只分一个分区,这个分区挂在了/根分区上。
但是现在尴尬了,我的物理内存是1G,我想给2G的一个swap分区,又不想花钱再买一块盘了。那咋整?
可以使用单文件作为swap分区,这个就有意思了。 完全可以通过单文件充当swap分区
fallocate -l 2G /swapfile
chmod 600 /swapfile
dd if=/dev/zero of=/swapfile bs=1M count=2048
mkswap /swapfile
swapon /swapfile
编辑/etc/fstab文件,文件追加写入即可
/swapfile none swap defaults 0 0
swap分区看情况吧,内存很富裕的情况下,并且对性能要求高,那么建议直接关闭算了,减少内存和硬盘IO交换的过程。
内存很紧缺的情况下, 并且对性能要求也没那么高,让多一点程序能跑起来,那么可以尝试开启swap分区或者扩容swap分区,勉强撑一下也行。
但是对于MySQL、Kafka、K8S节点这些,建议Swap关闭吧,毕竟性能还是要保证的,内存也不贵,这些服务也不至于给8G、16G的内存卡吧,好说歹说基本都是32G起步。
Swap分区不仅可以使用磁盘分区,还可以使用单文件作为swap分区哟,这个很有意思,有时候也有点用处的^^