swap分区的前世今生

418 阅读5分钟

0.引言

之前在介绍/etc/fstab的时候说到,在磁盘挂载的配置文件中swap分区是一个特殊的存在,在Hadoop的节点的安装中,通常建议将swap分区拿掉,在CM(cloudera management)的监控中,swap分区的存在会导致页面的增多,一般出现这种情况都是因为在节点安装的过程中,没有将swap分区解挂载导致的。而在一些MPP(Massively Parallel Processing)架构的OLAP数据库中,以vertica为例,在官方文档中则明确要求要设置不少于2G的SWAP分区。那么SWAP分区对于Linux系统,对于大数据平台的意义是怎样的呢,带着这些问题,今天我们来探讨一下linux的swap分区。

1.SWAP分区介绍

swap分区是Linux中用于虚拟内存管理的重要组成部分。它的原理是将内存中不常用的数据移动到硬盘中的swap空间,从而释放出内存供其他程序使用。具体来说,当系统内存不足时,Linux会将正在运行的程序和数据先放在物理内存中,然后将不经常使用的数据交换到swap分区中。这样,物理内存便空出来,可以为更重要的程序提供更多的空间。

在Linux系统中,Swap分区是通过将硬盘空间分割出一部分,然后将其格式化为内存交换空间来实现的。当系统需要交换内存时,它会将一些内存中的数据写入到Swap分区的硬盘空间上,然后将内存释放。当需要使用这些数据时,系统会从Swap分区的硬盘空间中将数据读回内存。

2.SWAP分区的使用场景

适合使用SWAP分区的场景:

  • 当物理内存不足以满足程序运行需要时,打开Swap分区可以帮助操作系统释放内存,降低GC的频率。
  • 当进行大量数据处理、运行大型程序时,打开Swap分区可以提供更多的内存交换空间,保证程序的稳定运行。

什么场景下需要关闭Swap分区:

  • 避免内存泄漏:当系统中的Swap分区空间不足时,操作系统会将一些内存中的数据写入硬盘上,从而导致内存泄漏。关闭Swap分区可以避免这种情况的发生。
  • 提高系统性能:关闭Swap分区可以减少系统中的交换开销,从而提高系统的性能。

回到最初的问题,是否使用swap分区的界限并不是非常严格的,要根据具体的使用场景,hadoop节点在一些场景下也是可以打开swap分区的,但大多数场景下,大多是用hive跑一些离线的批处理任务,对内存的要求相对没有很高,此时建议将swap分区拿掉,可以减少系统中内存交换的频次。而对于MPP架构的数据库,多个节点需要同时处理大量数据,并尽可能的快速返回用户的即时查询结果,此时对内存的消耗是比较大的,因此往往会建议将swap分区打开以避免物理内存不足。

3.实操

3.1 如何打开/关闭swap分区

在Linux系统中,swapon命令用于打开Swap分区,swapoff命令用于关闭Swap分区。

  • swapon命令语法如下:
swapon [options] [partition]

其中,options是指定swapon命令的选项,partition是指定要启用的交换分区的名称。 下面是一些常用的swapon命令选项:

-v:显示交换分区的详细信息并显示进度。 -h:显示帮助信息。

例如,要启用名为sda3的交换分区,可以使用以下命令:

sudo swapon /dev/sda3
  • swapoff命令的语法如下:
Copy code
swapoff [options] [partition]

其中,options是指定swapoff命令的选项,partition是指定要关闭的Swap分区的名称。 下面是一些常用的swapoff命令选项:

-a:关闭所有的Swap分区。

-s:显示Swap分区的详细信息。

-v:显示Swap分区的详细信息并显示进度。

-f:强制关闭指定的Swap分区,即使该分区正在使用中也可以关闭。

-h:显示帮助信息。

例如,要关闭名为sda3的Swap分区,可以使用以下命令:

sudo swapoff -a /dev/sda3

该命令将关闭所有的Swap分区,包括sda3分区。如果只想关闭指定的Swap分区,可以使用以下命令:

sudo swapoff /dev/sda3

该命令将关闭指定的sda3分区。需要注意的是,如果指定的Swap分区正在使用中,swapoff命令将无法关闭它。因此,在使用swapoff命令关闭Swap分区之前,需要确保该分区没有正在使用的进程。另外,在使用swapoff命令关闭Swap分区之后,需要确保系统有足够的物理内存来满足程序的运行需要。

3.2 查看swap分区的使用情况

可以使用以下命令来查看Swap分区的使用情况:

  • 使用free命令查看系统内存和Swap分区的使用情况:
free -h

该命令将显示系统内存和Swap分区的使用情况,其中Swap分区的使用情况将以百分比的形式显示。

  • 使用/proc/swaps文件查看Swap分区的使用情况:
cat /proc/swaps

该命令将显示系统中所有Swap分区的信息,包括分区名称、大小、是否启用等。

  • 使用top命令查看系统进程和内存使用情况:
top

该命令将显示系统当前的进程和内存使用情况,其中内存使用情况将以百分比的形式显示。另外,还可以使用以下命令来查看系统内存的详细使用情况:

mpstat

该命令将实时显示系统内存的使用情况,包括使用率、缓存、保留等信息。