Linux命令-swapon(开启交换空间)
2026/8/14 19:40:12 网站建设 项目流程

Linux命令-swapon(开启交换空间))

    • 快速参考
    • 基本用法
    • 选项详解
    • 创建交换空间完整流程
      • 方式一:交换文件(推荐,灵活)
      • 方式二:交换分区
    • 多交换空间优先级管理
    • 交换空间优化配置
    • 实用脚本
    • swap 大小建议

swapon用于在 Linux 系统上启用交换空间(swap space)。交换空间是当物理内存不足时,内核将不常用的内存页面写入磁盘以释放 RAM 的机制。交换空间可以是一个专用磁盘分区(swap 分区),也可以是一个普通文件(swap file)。swaponswapoff配对,共同管理系统的虚拟内存。

快速参考

swapon[选项][设备|文件]

Linux 推荐交换空间大小为物理内存的 1-2 倍(休眠场景需要 ≥ RAM 大小)。现代大内存服务器(>64GB)可能只需少量交换空间作为安全网。

基本用法

# 查看当前交换空间使用情况swapon--show# 启用交换分区sudoswapon/dev/sdb2# 启用交换文件sudoswapon/swapfile# 启用所有在 /etc/fstab 中定义的交换空间sudoswapon-a# 启用所有并查看详细信息sudoswapon-av# 指定优先级(数值越高越优先使用)sudoswapon-p10/dev/sdb2sudoswapon-p5/swapfile# /dev/sdb2 优先级更高,会先被使用# 按分区标签启用sudoswapon-L"swap_partition"# 按 UUID 启用sudoswapon-U"1234-abcd-5678-efgh"

选项详解

选项说明
-a启用/etc/fstab中所有标记为swap的分区
-d丢弃(discard)已释放的交换块(SSD 优化)
-e如果设备不存在则静默跳过
-f强制操作
-p PRIORITY设置优先级(-1 到 32767)
-s显示交换使用摘要(已废弃,用--show
--show显示已启用的交换空间
--noheadings显示时不输出表头
--raw原始格式输出
-v详细模式

创建交换空间完整流程

方式一:交换文件(推荐,灵活)

# 1. 创建指定大小的交换文件sudofallocate-l4G /swapfile# 或使用 dd(更可靠但较慢)# sudo dd if=/dev/zero of=/swapfile bs=1M count=4096# 2. 设置严格权限sudochmod600/swapfile# 3. 格式化为交换空间sudomkswap/swapfile# Setting up swapspace version 1, size = 4 GiB# UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx# 4. 启用交换文件sudoswapon/swapfile# 5. 验证swapon--showfree-h# 6. 持久化配置(添加到 /etc/fstab)echo"/swapfile none swap sw 0 0"|sudotee-a/etc/fstab# 7. 验证 fstab 配置sudoswapon-a

方式二:交换分区

# 1. 使用 fdisk/parted 创建分区并将类型设为 "Linux swap" (82)sudofdisk/dev/sdb# n → 创建新分区# t → 更改类型为 82 (Linux swap)# w → 写入并退出# 2. 通知内核重新读取分区表sudopartprobe /dev/sdb# 3. 格式化交换分区sudomkswap/dev/sdb1# 4. 启用交换分区sudoswapon/dev/sdb1# 5. 获取 UUID 用于 fstabsudoblkid /dev/sdb1# /dev/sdb1: UUID="abc-def-123" TYPE="swap"# 6. 添加到 /etc/fstabecho"UUID=abc-def-123 none swap sw 0 0"|sudotee-a/etc/fstab

多交换空间优先级管理

# 同时使用多个交换空间并设置优先级# SSD 优先于 HDDsudoswapon-p100/dev/nvme0n1p3# NVMe SSDsudoswapon-p50/dev/sda2# SATA SSDsudoswapon-p10/swapfile_hdd# 传统硬盘上的文件# 查看优先级(PRIO 列)swapon--show# NAME TYPE SIZE USED PRIO# /dev/nvme0n1p3 partition 8G 0B 100# /dev/sda2 partition 4G 0B 50# /swapfile_hdd file 2G 0B 10# 优先级相同的交换空间会被轮流使用(round-robin)sudoswapon-p50/dev/sda2sudoswapon-p50/dev/sdb2# 两个分区轮流写入,类似 RAID 0 的效果

交换空间优化配置

# 调整交换倾向(swappiness):0-100# 0: 尽量不用交换 100: 积极使用交换cat/proc/sys/vm/swappiness# 默认 60# 临时调整sudosysctlvm.swappiness=10# 永久调整echo"vm.swappiness=10"|sudotee/etc/sysctl.d/99-swap.conf# SSD 优化:启用 TRIM/Discardsudoswapon-d/swapfile# 或在 fstab 中使用 discard 选项# /swapfile none swap sw,discard 0 0# 查看交换空间 I/O 统计cat/proc/vmstat|greppswp# 查看哪些进程在使用交换forpidin$(ls/proc|grep-E'^[0-9]+$');doswap=$(awk'/VmSwap:/ {print $2}'"/proc/$pid/smaps"2>/dev/null)if[-n"$swap"]&&["$swap"!="0"];thenname=$(cat"/proc/$pid/comm"2>/dev/null)echo"PID=$pidName=$nameSwap=${swap}kB"fidone|sort-t=-k4-rn|head-20

实用脚本

# 交换空间健康检查cat>/usr/local/bin/swap_health.sh<<'EOF' #!/bin/bash echo "===== Swap 健康报告 =====" echo "时间: $(date)" echo "" # 检查是否有交换空间 if [ $(swapon --show --noheadings | wc -l) -eq 0 ]; then echo "❌ 无激活的交换空间!建议至少配置 1GB" exit 1 fi # 显示交换空间详情 swapon --show echo "" free -h # 检查 fstab 配置 echo "" echo "=== /etc/fstab 中的交换配置 ===" grep -v '^#' /etc/fstab | grep swap || echo "⚠️ 警告:fstab 中无交换配置" # 检查 swappiness SWAPPINESS=$(cat /proc/sys/vm/swappiness) echo "" echo "vm.swappiness = $SWAPPINESS" if [ "$SWAPPINESS" -gt 60 ]; then echo "⚠️ swappiness 偏高,建议降低以减少不必要的交换" fi # 检查是否有极高交换使用 SWAP_USED=$(free | awk '/Swap:/ {print $3}') SWAP_TOTAL=$(free | awk '/Swap:/ {print $2}') if [ "$SWAP_TOTAL" -gt 0 ]; then USAGE=$((SWAP_USED * 100 / SWAP_TOTAL)) if [ "$USAGE" -gt 80 ]; then echo "❌ 交换空间使用率: ${USAGE}% — 建议增加物理内存" fi fi EOFchmod+x /usr/local/bin/swap_health.sh# swapon -a 与 nofail 选项的安全用法# /etc/fstab 中加 nofail 避免启动中断# UUID=abc-def none swap sw,nofail 0 0

swap 大小建议

物理内存推荐交换空间场景说明
≤ 2 GBRAM × 2传统小型系统
2-8 GB= RAM一般服务器
8-64 GB4-8 GB现代中等服务器
> 64 GB4-8 GB仅作安全网
需要休眠≥ RAM休眠必须
# 快速检查建议RECOMMENDED_SWAP(){localMEM_KB=$(grepMemTotal /proc/meminfo|awk'{print $2}')localMEM_GB=$((MEM_KB/1024/1024))if["$MEM_GB"-le2];thenecho"$((MEM_GB*2))GB"elif["$MEM_GB"-le8];thenecho"$MEM_GBGB"elseecho"4-8 GB(安全网)"fi}echo"推荐交换空间:$(RECOMMENDED_SWAP)"

swapon是 Linux 内存管理的开关。合理配置交换空间可以在物理内存不足时为系统提供缓冲,避免 OOM 进程终止。但交换空间不是内存的替代品——如果系统频繁大量使用交换(“thrashing”),应考虑增加物理内存而非增大交换空间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询