Linux Swap分区创建与使用全攻略:虚拟内存配置实战

张开发
2026/4/17 22:55:23 15 分钟阅读

分享文章

Linux Swap分区创建与使用全攻略:虚拟内存配置实战
在Linux系统运维中你是否遇到过这样的场景服务器运行多个服务后突然出现程序卡顿、进程被强制杀死查看日志发现Out of Memory (OOM) killer报错其实这背后的核心原因就是物理内存不足且未配置Swap交换分区。Swap分区交换空间作为Linux系统的“虚拟内存”是物理内存的应急备用空间能在物理内存耗尽时临时将不活跃数据交换到磁盘避免系统崩溃。无论是云服务器、物理服务器还是嵌入式设备合理配置Swap都是保障系统稳定运行的关键。本文将从Swap原理、两种创建方式文件/分区、启用配置、日常监控、优化技巧到安全删除一步步拆解实战操作全程附带命令示例和避坑提示也能跟着操作彻底掌握Swap分区的配置与管理。一、先搞懂Swap分区是什么有什么用在开始操作前先理清核心概念避免盲目配置——Swap不是“万能的”它能应急但不能替代物理内存。1. 核心定义**Swap分区交换空间** 是Linux系统专门划分的一块磁盘空间或文件当物理内存RAM被占满时系统内核会自动将内存中长时间未使用、不活跃的进程数据临时“交换”到Swap空间中腾出物理内存给当前活跃的进程使用。通俗理解Swap就像物理内存的“备胎”平时用不到但一旦物理内存不够用它就能临时顶上避免系统直接“罢工”。2. 核心作用必看防止OOM崩溃这是最核心的作用物理内存耗尽时避免系统因内存溢出杀死关键进程如Nginx、MySQL或直接卡死。提升多任务稳定性运行大型程序、多服务并发如服务器同时运行Web服务、数据库、缓存时缓解瞬时内存压力避免程序卡顿。支持系统休眠若需要使用Linux的hibernate休眠功能Swap分区大小必须≥物理内存大小休眠时会将内存数据全部写入Swap。优化内存缓存系统可将部分“冷数据”长期不使用放入Swap让物理内存专注处理“热数据”频繁访问提升整体运行效率。3. 必须注意的代价避坑重点Swap的优势很明显但代价也不容忽视配置时需权衡速度差异极大物理内存的读写速度约10-30GB/s而磁盘HDD仅100MB/s左右SSD约1-3GB/s速度远低于内存频繁使用Swap会导致系统卡顿、I/O负载飙升。损耗存储设备频繁的读写操作会加速SSD的磨损尤其是云服务器的SSD磁盘长期高频使用会缩短存储寿命。核心结论Swap是“应急方案”不能替代物理内存若服务器长期频繁使用Swap优先考虑升级物理内存而非扩大Swap。4. Swap大小推荐Swap大小没有固定标准需根据物理内存大小和使用场景调整以下是行业通用推荐直接参考即可物理内存大小推荐Swap大小适用场景说明≤ 2GB物理内存的2倍内存极小如嵌入式设备、轻量云主机必须依赖Swap保障运行2GB – 8GB与物理内存大小相等平衡性能与空间适合大多数服务器如Web服务器、数据库服务器8GB – 64GB4GB – 8GB内存充足Swap仅作应急无需过大避免浪费磁盘空间≥ 64GB4GB 或不配置大内存场景如高性能服务器、大数据节点Swap意义不大可省略补充说明云服务器阿里云、腾讯云、AWS等通常默认不配置Swap需手动创建物理服务器建议在系统安装时提前划分Swap分区避免后期调整麻烦。二、Swap的两种创建方式文件 vs 分区Linux支持两种Swap形态分别适用于不同场景无需纠结优先选择“Swap文件”简单、安全、易调整。两种方式对比清晰选型创建方式核心优点核心缺点适用场景Swap 文件1. 无需分区不改动磁盘分区表2. 灵活可随时增减大小3. 操作简单风险低性能略低于Swap分区有轻微系统开销云主机、虚拟机、临时扩容、入门推荐Swap 分区I/O效率高性能优于Swap文件长期使用更稳定需空闲磁盘空间调整大小麻烦操作风险高易误删数据物理服务器、长期固定配置、对性能要求较高的场景提醒优先选择Swap文件操作简单、无需改动磁盘分区即使配置错误也能轻松删除不会影响系统正常运行Swap分区需操作磁盘分区表误操作可能导致数据丢失。三、方式一创建Swap文件无需分区仅需5步即可完成全程命令复制可用适合90%的场景云主机、虚拟机、物理机临时扩容。环境准备拥有root权限所有命令需加sudo或直接切换到root用户sudo su -磁盘剩余空间 ≥ 计划创建的Swap大小用df -h查看磁盘空间。步骤1创建Swap文件两种方法选一个即可推荐使用fallocate命令快速、高效若系统不支持再用dd命令兼容性更好。# 方法1fallocate推荐— 创建2GB Swap文件路径/swapfile可自定义sudo fallocate -l 2G /swapfile# 方法2dd兼容性更好— bs1M块大小count2048总大小2GBsudo dd if/dev/zero of/swapfile bs1M count2048 statusprogress说明statusprogress会显示创建进度避免等待时不知道是否生效Swap文件路径建议放在根目录/swapfile方便后续管理。步骤2设置文件权限安全必备重点Swap文件包含系统敏感数据内存交换数据必须设置为仅root用户可读写防止普通用户读取或篡改sudo chmod 600 /swapfile验证权限ls -l /swapfile输出应为-rw------- 1 root root 2147483648 Apr 14 10:00 /swapfile仅root有读写权限。步骤3格式化为Swap格式创建的空文件无法直接作为Swap使用需用mkswap命令初始化将其格式化为Linux认可的Swap类型sudo mkswap /swapfile成功输出类似Setting up swapspace version 1, size 2 GiB (2147479552 bytes) no label, UUIDxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxUUID无需记住后续配置永久启用时可按需调用。步骤4临时启用Swap立即生效重启失效格式化完成后用swapon命令临时启用Swap无需重启系统sudo swapon /swapfile步骤5验证Swap是否生效关键一步用以下任意命令查看确认Swap已启用# 方法1查看内存与Swap总览-h 人性化显示推荐free -h# 方法2查看详细Swap信息显示Swap文件/分区、大小、使用情况swapon --show # 或 swapon -s# 方法3查看系统Swap配置更底层cat /proc/swaps成功生效的标志free -h输出中Swap行的total不为0且used会随内存使用情况变化。步骤6永久启用Swap临时启用的Swap重启系统后会失效需将其写入/etc/fstab配置文件让系统开机自动挂载。# 1. 先备份/etc/fstab防止改错避免系统无法开机sudo cp /etc/fstab /etc/fstab.bak# 2. 追加Swap配置到/etc/fstabecho /swapfile none swap sw 0 0 | sudo tee -a /etc/fstab# 3. 验证配置无报错即正常若报错需检查配置行sudo mount -a配置说明/swapfile是Swap文件路径swap是文件类型sw是挂载选项0 0表示不备份、不检查。四、方式二创建独立Swap分区性能优先适合物理服务器适用于有未分配磁盘空间的物理服务器性能优于Swap文件但操作更复杂需谨慎操作避免误删现有分区。前提条件磁盘有空闲的未分区空间用fdisk -l或lsblk查看找到“未分配”的空间目标分区无数据、未挂载操作前务必确认避免误删现有数据。步骤1创建Swap分区以/dev/sdb为例用fdisk命令操作磁盘分区全程交互操作按提示执行即可# 进入磁盘分区工具替换/dev/sdb为你的磁盘名如/dev/vdbsudo fdisk /dev/sdb# 以下是交互命令输入对应字母按回车执行n # 新建分区p # 选择主分区primary1 # 分区号默认1可自定义 回车# 起始扇区默认直接回车即可2G # 分区大小如2GB根据需求调整t # 更改分区类型82 # 分区类型ID固定为82代表Linux Swapp # 查看分区信息确认分区大小、类型正确w # 保存配置并退出此步不可逆确认无误再执行退出后系统会自动识别新分区若未识别执行partprobe刷新分区表。步骤2格式化Swap分区将新建的分区格式化为Swap类型替换/dev/sdb1为你的分区名sudo mkswap /dev/sdb1步骤3启用并永久配置# 1. 临时启用Swap分区sudo swapon /dev/sdb1# 2. 永久启用写入/etc/fstab# 先查看分区UUID推荐用UUID挂载更稳定blkid /dev/sdb1# 编辑/etc/fstab添加以下内容替换UUID为你的分区UUIDsudo vim /etc/fstab# 新增一行 UUIDxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx none swap sw 0 0# 3. 验证配置无报错即正常sudo mount -a free -h五、Swap日常管理与监控运维高频操作配置完成后需定期监控Swap使用情况避免因Swap过度使用导致系统卡顿以下是常用管理命令。1. 查看Swap使用情况最常用# 总览内存Swap使用情况推荐人性化显示free -h# 详细查看所有Swap设备文件/分区的使用情况swapon --show# 实时监控查看内存、Swap、CPU使用情况按M排序内存P排序CPUtop# 实时监控Swap换入换出si/sovmstat 1 # si从Swap读入内存so从内存写入Swap长期不为0说明内存不足关键指标siSwap In和soSwap Out长期大于0说明物理内存不足频繁使用Swap需排查进程或升级内存。2. 调整Swap优先级多Swap设备时若系统有多个Swap如一个Swap文件一个Swap分区可设置优先级数字越大优先级越高系统优先使用优先级高的Swap# 临时设置优先级-1到32767这里设为10sudo swapon -p 10 /swapfile# 永久设置修改/etc/fstab添加pri参数/swapfile none swap sw,pri10 0 03. 临时关闭Swap应急操作如需临时关闭Swap如测试内存性能、维护磁盘执行以下命令# 关闭指定Swap文件/分区sudo swapoff /swapfile# 关闭所有Swap设备sudo swapoff -a提示关闭Swap前需确保物理内存充足否则会导致进程被杀死关闭后执行free -h确认Swap已关闭。六、安全关闭与删除Swap释放空间零风险若不再需要Swap如升级物理内存后需按顺序操作避免直接删除文件/分区导致系统异常。步骤1停用Swap必做第一步# 停用指定Swap如Swap文件sudo swapoff /swapfile# 若为Swap分区替换为分区名# sudo swapoff /dev/sdb1步骤2删除/etc/fstab中的配置避免重启自动挂载# 方法1手动编辑sudo vim /etc/fstab# 找到Swap对应的行删除或注释加#开头# 方法2sed自动删除高效推荐sudo sed -i /\/swapfile/d /etc/fstab# 删除Swap文件配置# 若为分区用UUID匹配删除sudo sed -i /UUIDxxxxxx/d /etc/fstab步骤3删除Swap文件/分区释放空间# 1. 删除Swap文件简单直接删除即可sudo rm -f /swapfile# 2. 删除Swap分区谨慎仅适用于独立Swap分区sudo fdisk /dev/sdb# 进入分区工具d # 删除分区选择对应分区号w # 保存退出partprobe # 刷新分区表步骤4验证删除结果free -h # Swap total应为0swapon --show # 无任何输出说明删除成功七、Swap优化建议避坑提升性能合理优化Swap配置能减少性能损耗提升系统稳定性以下是4个关键优化点必看。1. 控制Swap大小避免浪费不要盲目扩大Swap8GB内存的服务器配置2-4GB Swap即可过大的Swap会浪费磁盘空间还可能导致系统过度依赖Swap降低运行效率。2. 调整swappiness参数核心优化swappiness是Linux内核参数控制系统使用Swap的倾向取值范围0-1000尽可能不用Swap仅在物理内存耗尽时使用100尽可能使用Swap优先将内存数据交换到磁盘。# 1. 查看当前swappiness值cat /proc/sys/vm/swappiness# 2. 临时调整重启失效适合测试sudo sysctl vm.swappiness10# 3. 永久调整写入/etc/sysctl.conf推荐echo vm.swappiness10 | sudo tee -a /etc/sysctl.conf sudo sysctl -p # 立即生效推荐值服务器Web、数据库设为10-30优先用内存桌面Linux设为60-80兼顾休眠和多任务。3. SSD与HDD的Swap配置差异SSD磁盘云主机默认可正常配置Swap但避免高频使用减少SSD磨损HDD磁盘机械硬盘Swap性能极差尽量减小Swap大小避免频繁读写导致系统卡顿。4. 禁止休眠时减小Swap大小若不需要系统休眠功能服务器通常不需要Swap大小无需≥物理内存配置4-8GB即可避免浪费磁盘空间。八、总结Swap分区作为Linux系统的“虚拟内存备胎”是保障系统稳定运行的关键但它不能替代物理内存——核心作用是“应急”而非“提升性能”。本文核心要点总结建议收藏首选Swap文件简单、灵活、安全物理服务器追求性能选Swap分区。Swap创建核心步骤创建文件/分区 → 设权限 → 格式化 → 临时启用 → 永久配置写入/etc/fstab。常用命令free -h查看、swapon启用、swapoff关闭、mkswap格式化。优化关键调整swappiness10-30控制Swap大小避免高频使用。掌握Swap的配置与管理能有效避免因内存不足导致的系统崩溃尤其在内存有限的云主机、嵌入式设备中至关重要。日常运维中若发现系统频繁使用Swap优先排查内存占用过高的进程或考虑升级物理内存这才是最根本的解决方案。

更多文章