插件窝 干货文章 linux系统没有交换分区吗

linux系统没有交换分区吗

交换 分区 内存 空间 132    来源:    2025-05-01

在 Linux 系统中,交换分区(Swap Partition)并不是强制必需的,但它是系统内存管理的重要补充。以下是关于交换分区的详细说明和解决方案:


1. 检查现有交换空间

free -h      # 查看内存和交换空间使用情况
swapon --show # 显示当前激活的交换分区/文件
  • 如果输出中 Swap 行显示为 0,则说明系统未配置交换空间。

2. 为什么需要交换分区?

  • 内存扩展:当物理内存不足时,内核将不活跃的页面移到交换空间。
  • 休眠支持:休眠(Hibernate)需要交换空间保存内存镜像。
  • 避免OOM:减少因内存耗尽导致进程被强制终止的风险。

3. 解决方案:添加交换空间

方法1:创建交换文件(无需分区)

# 步骤1:创建交换文件(例如 4GB)
sudo fallocate -l 4G /swapfile
# 或使用 dd(若 fallocate 不可用):
# sudo dd if=/dev/zero of=/swapfile bs=1M count=4096

# 步骤2:设置权限
sudo chmod 600 /swapfile

# 步骤3:格式化为交换空间
sudo mkswap /swapfile

# 步骤4:启用交换文件
sudo swapon /swapfile

# 步骤5:永久生效(写入 /etc/fstab)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

方法2:创建交换分区(需磁盘空间)

  1. 使用 fdisk/gdisk 创建新分区,类型设置为 Linux swap(代码 828200)。
  2. 格式化并启用: bash sudo mkswap /dev/sdXN # 替换为实际分区 sudo swapon /dev/sdXN sudo echo '/dev/sdXN none swap sw 0 0' >> /etc/fstab

4. 优化交换空间配置

  • Swappiness 调整(控制内存到交换的倾向,默认值 60): bash sudo sysctl vm.swappiness=10 # 临时生效 echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf # 永久生效
    • 建议值:
    • SSD/高性能环境10-30
    • HDD/内存紧张30-60

5. 注意事项

  • 云服务器:部分云平台默认禁用交换,需检查供应商政策。
  • SSD寿命:频繁交换可能影响SSD寿命,建议适当降低 swappiness
  • 性能监控:使用 vmstat 1sar -S 1 监控交换使用情况。

6. 验证结果

free -h              # 确认交换空间生效
cat /proc/swaps      # 查看交换设备详情

如果仍有疑问,可以提供 df -hlsblk 的输出,我会进一步分析磁盘配置建议。