深入了解 swap:作用、局限与分区建立
什么是swap?
swap,也就是常说的交换分区,有时也被称作交换空间,它本质上是磁盘上的一块特殊区域。在物理内存空间告急时,内核会把内存中闲置的内存页写入交换区,这样就能腾出内存空间给活跃的进程使用,这便是 swap 的核心作用。
不过,swap 也存在明显的缺点。由于它位于磁盘上,和物理内存相比,读写数据的速度要慢得多。所以如果过度使用 swap,很可能会导致系统性能下降。基于此,如果内存经常无法满足工作负载的需求,更合理的做法是考虑提升内存性能,比如更换更大容量的内存,而不是单纯依赖交换空间。
值得一提的是,有些容器管理工具(例如 Docker、k8s)在创建容器时会自动关闭 Swap。这是因为容器属于轻量级虚拟化技术,它们与主机共享物理内核。Swap 的主要作用是在物理内存不足时将数据移动到磁盘上,但容器内的进程本应受到资源限制,所以在容器内使用 Swap 可能无法达到预期效果,还可能引发性能问题。
如何建立新的 swap 分区
首先是创建交换分区。可以使用 parted 或 fdisk 工具来创建所需大小的分区,并将其文件系统类型设置为 linux-swap。创建分区之后,要记得运行 udevadm settle 命令,这个命令会等待系统检测到新分区,并在 /dev 中创建关联的设备文件。
然后是格式化设备。这一步需要使用 mkswap 命令,例如:mkswap /dev/vdb2。
之后是激活交换空间,使用 swapon 命令即可,比如:swapon /dev/vdb2。
如果想要持久激活交换空间,就需要在 /etc/fstab 文件中添加一个条目。例如:UUID=39e2667a-9458-42fe-9665-c5c854605881 swap swap defaults 0 0 。这里需要说明的是,第二个字段通常是为挂载点保留的,但由于交换设备无法通过目录结构访问,所以该字段用占位符值 swap 即可;第三个字段是文件系统类型,交换空间的文件系统类型就是 swap。
最后,记得运行 systemctl daemon-reload 命令,或者重启服务器,这样才能让 systemd 注册新的配置。