温馨提示×

Linux Swap分区设置指南

小樊
58
2025-11-02 05:52:36
栏目: 智能运维

Linux Swap分区设置指南

一、Swap分区概述

Swap(交换分区/文件)是Linux系统的虚拟内存空间,当物理内存(RAM)不足时,系统会将闲置内存数据暂存至Swap空间,以缓解内存压力。其本质是将硬盘的一部分空间模拟为内存,但访问速度远低于物理内存(尤其是机械硬盘)。合理配置Swap可提升系统稳定性,避免因内存耗尽导致的进程崩溃或系统死机。

二、查看当前Swap状态

在配置前,需先确认系统现有Swap情况,常用命令如下:

  • 查看Swap总量及使用量free -h(以人类可读格式显示,如G、M)或free -m(以MB为单位)。
  • 查看详细Swap设备信息swapon --show(列出已启用的Swap分区/文件及优先级)。
  • 查看内存与Swap综合状态tophtop(动态监控工具,包含Swap使用率)。

三、创建Swap分区(磁盘分区方式)

适用于需要固定大小、高性能Swap的场景(如服务器长期稳定运行),步骤如下:

1. 准备磁盘分区

使用fdisk工具在目标磁盘上创建新分区(以/dev/sdb为例):

fdisk /dev/sdb
  • 输入n创建新分区,选择分区类型(主分区p或逻辑分区l),设置分区大小(如+1G表示1GB)。
  • 输入t修改分区类型,输入82(Linux Swap类型)。
  • 输入w保存并退出,此时分区尚未生效,需执行partprobe /dev/sdb让内核识别新分区。

2. 格式化Swap分区

使用mkswap命令将分区格式化为Swap空间(假设分区为/dev/sdb1):

mkswap /dev/sdb1

执行后会显示Swap分区的UUID及大小。

3. 启用Swap分区

使用swapon命令激活分区:

swapon /dev/sdb1

可通过free -h验证Swap是否启用。

4. 配置开机自启

编辑/etc/fstab文件,添加以下内容(替换为实际分区路径):

/dev/sdb1 swap swap defaults 0 0

保存后,系统重启时会自动启用该Swap分区。

四、创建Swap文件(文件方式)

适用于动态调整大小、无额外磁盘分区的场景(如云服务器、内存临时不足),步骤如下:

1. 创建Swap文件

使用fallocate(快速)或dd(通用)命令创建指定大小的文件(以4GB为例):

sudo fallocate -l 4G /swapfile  # 推荐,速度快
# 或
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096  # 通用,速度慢

注:bs为块大小(如1M),count为块数量(bs*count=文件大小)。

2. 设置文件权限

Swap文件需限制为root专属读写,防止普通用户篡改:

sudo chmod 600 /swapfile

3. 格式化Swap文件

使用mkswap命令将文件格式化为Swap空间:

sudo mkswap /swapfile

4. 启用Swap文件

使用swapon命令激活文件:

sudo swapon /swapfile

5. 配置开机自启

编辑/etc/fstab文件,添加以下内容:

/swapfile none swap sw 0 0

保存后,系统重启时会自动启用该Swap文件。

五、Swap大小设置建议

Swap大小需根据物理内存大小应用场景调整,常见建议如下:

  • 内存≤2GB:Swap设置为内存的2倍(如2GB内存→4GB Swap)。
  • 2GB<内存≤8GB:Swap设置为等于内存(如4GB内存→4GB Swap)。
  • 8GB<内存≤64GB:Swap设置为内存的一半(如16GB内存→8GB Swap)。
  • 内存>64GB:根据应用需求调整(如数据库服务器可设为8-16GB,普通服务器可设为4-8GB)。

六、Swappiness参数调优

swappiness是控制内核使用Swap积极程度的参数,取值范围为0-100

  • 值越高(如100):内核越积极地将内存数据移至Swap(即使物理内存充足),适用于内存极大且Swap性能好的场景(如高端服务器+SSD)。
  • 值越低(如0):内核尽量使用物理内存,仅在内存耗尽时才使用Swap(适用于内存紧张或SSD寿命敏感的场景,如云服务器)。

调整方法

  • 临时调整(重启后失效):
    sudo sysctl vm.swappiness=30  # 设置为30(默认60)
    
  • 永久生效
    编辑/etc/sysctl.conf文件,添加以下内容:
    vm.swappiness=30
    
    执行sudo sysctl -p使配置生效。

七、删除Swap分区/文件

若需移除Swap,需先禁用再删除,步骤如下:

1. 禁用Swap

sudo swapoff /dev/sdb1  # 删除分区
# 或
sudo swapoff /swapfile  # 删除文件

2. 删除配置

  • 分区:从/etc/fstab中删除对应的Swap分区行。
  • 文件:删除Swap文件并移除/etc/fstab中的配置:
    sudo rm /swapfile
    sudo sed -i '/\/swapfile/d' /etc/fstab  # 删除包含/swapfile的行
    

注意事项

  • Swap性能:Swap文件位于机械硬盘时,频繁Swap会导致系统卡顿;建议将Swap放在SSD上(尤其是云服务器)。
  • SSD寿命:虽然Swap会消耗SSD写入次数,但现代SSD寿命足以应对常规Swap使用(无需过度担心)。
  • 内存充足场景:若物理内存足够(如>16GB且应用无需大量内存),可禁用Swap(swappiness=0),提升系统响应速度。

0