前言
这篇文章将讲述交换分区的管理,包括交换分区的介绍,交换分区的作用,以及如何增加交换分区。
简介
Linux内核将RAM分成内存块和交换(Swap)进程,交换(Swap)进程是当Linux内核使用硬盘空间(交换空间)来存储RAM中的信息,从而释放一些RAM空间。这就是为什么在安装Linux发行版时,安装向导通常会提示为系统分配一些空间以及给交换(Swap)分配另一个空间。使用交换(Swap)是扩展 RAM 的一种非常有用的方法,因为它在 RAM 空间耗尽且必须继续进程时提供必要的额外内存。当安装Linux的内存小于1Gb 时,特别建议这样做。虽然最后,一切都取决于你。
作用:“提升”内存的容量,防止OOM(Out Of Memory)
OOM简介
OOM:out of memory,内存溢出。
oom_killer是Linux自我保护的方式,防止内存不足时出现严重问题。
Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉。内核检测到系统内存不足、挑选并杀掉某个进程的过程可以参考内核源代码linux/mm/oom_kill.c,当系统内存不足的时候,out_of_memory()被触发,然后调用select_bad_process()选择一个”bad”进程杀掉。如何判断和选择一个”bad进程呢?linux选择”bad”进程是通过调用oom_badness(),挑选的算法和想法都很简单很朴实:最bad的那个进程就是那个最占用内存的进程。
swap的大小
一般推荐设置交换分区大小为内存的2倍
在生产环境中:
大于4G二小于16G的系统,最小需要4G交换空间;
大于16G二小于64G的系统,最小需要8G交换空间;
大于64G二小于256G的系统,最小需要16G交换空间。
查看当前交换分区
命令:free -m
[root@localhost ~]# free -m total used free shared buff/cache available Mem: 972 666 59 12 246 152 Swap: 2047 10 2037
可看到当前交换分区是2G。
增加交换分区
1)准备分区(按照正常操作增加分区)
[root@localhost ~]# fdisk /dev/sdc 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0xa4ce7f2b 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1):1 起始 扇区 (2048-10485759,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759):+2G 分区 1 已设置为 Linux 类型,大小设为 2 GiB 命令(输入 m 获取帮助):p 磁盘 /dev/sdc:5368 MB, 5368709120 字节,10485760 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xa4ce7f2b 设备 Boot Start End Blocks Id System /dev/sdc1 2048 4196351 2097152 83 Linux 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。 [root@localhost ~]# partprobe /dev/sdc //刷新分区表 [root@localhost ~]# ls /dev/sdc* //查看sdc磁盘 /dev/sdc /dev/sdc1
这个分区不能存放任何数据,需要作为交换分区处理。
2)格式化
命令: mkswap /dev/sdc1
[root@localhost ~]# mkswap /dev/sdc1 正在设置交换空间版本 1,大小 = 2097148 KiB 无标签,UUID=38ba62dd-8bb8-484b-a16d-191af594032a
3)挂载,查看交换分区
命令:swapon /dev/sdc1 //挂载交换分区
//挂载交换分区 [root@localhost ~]# swapon /dev/sdc1 [root@localhost ~]# free -m total used free shared buff/cache available Mem: 972 707 72 13 192 98 Swap: 4095 25 4070
可看到当前交换分区变为4G,挂载成功,交换分区通过将内存存放不下的内容存放到交换分区,以达到提升内存的效果。
4)卸载交换分区
命令:swapoff /dev/sdc1
//卸载sdc1交换分区 [root@localhost ~]# swapoff /dev/sdc1 [root@localhost ~]# free -m total used free shared buff/cache available Mem: 972 705 74 13 192 100 Swap: 2047 25 2022
可看到当前交换分区变为2G,卸载成功。