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
该命令将实时显示系统内存的使用情况,包括使用率、缓存、保留等信息。