Linux Swap 是什么?虚拟内存原理、配置与优化

Linux Swap 是什么?新手必须了解的虚拟内存基础知识

Linux 系统中,当物理内存(RAM)不足时,swap 机制作为虚拟内存的核心,通过将磁盘空间模拟为内存扩展,保障系统稳定运行。本文以简洁语言解析 Swap 的核心知识与实操方法。

一、虚拟内存基础:内存管理的核心抽象

虚拟内存通过硬件 MMU 与操作系统协作,为进程提供独立的虚拟地址空间,实现三大价值:

 

  • 内存隔离:进程间内存互不干扰,提升安全性;
  • 地址扩展:突破物理内存限制,支持超大程序运行;
  • 共享优化:通过共享库和内存映射减少重复占用。

 

Linux 采用分页机制管理内存,以 4KB 标准页为单位。当进程访问不在物理内存的页时,触发缺页中断,内核从 Swap 或磁盘加载数据。

二、Swap 机制:物理内存的弹性缓冲

2.1 工作原理

Swap 是磁盘上的专用区域,当物理内存不足时:

 

  1. 页面选择:内核通过 LRU 算法(最近最少使用)挑选冷数据页;
  2. 换出操作:将选中页写入 Swap,标记为 “已换出”;
  3. 换入操作:进程再次访问时,从 Swap 读回物理内存。

2.2 两种实现形式

形式 创建命令示例 适用场景 特点
交换分区 mkswap /dev/sdb2 长期运行服务器 连续 IO 性能优
交换文件 fallocate -l 4G /swapfile 云主机 / 容器 灵活扩容,动态调整

三、Swap 配置与优化实操

3.1 基础配置三步法(以 4GB 交换文件为例)

# 1. 创建文件
sudo fallocate -l 4G /swapfile

# 2. 设置权限并格式化
sudo chmod 600 /swapfile && sudo mkswap /swapfile

# 3. 启用并开机自启
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

3.2 关键参数调优

  • swappiness(0-100):控制 Swap 使用倾向,值越低越优先用物理内存:
    # 临时设置为15(推荐数据库服务器)
    sudo sysctl vm.swappiness=15
    # 永久生效
    echo 'vm.swappiness=15' | sudo tee -a /etc/sysctl.conf

     

    • 数据库服务器:5-10;桌面环境:30-50;测试机:60-80。
  • vfs_cache_pressure:降低值保留更多文件缓存:
    echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf
    

四、监控与问题解决

4.1 常用监控工具

  • free -h:快速查看内存 / Swap 使用概况;
  • vmstat 1 5:实时监控换入(si)/ 换出(so)速率;
  • sar -W 1 3:分析历史 Swap 活动。

4.2 常见问题解决

  • Swap 使用率过高:用top -o %MEM排查内存泄漏进程,优化应用或增加物理内存;
  • 性能下降:将 Swap 迁移至 SSD,或启用 zswap 内存压缩;
  • 容器环境:Kubernetes 需在 kubelet 配置中开启failSwapOn: false

结语

Swap 是 Linux 内存管理的 “安全气囊”,但需理性使用:优先优化应用和增加物理内存,通过监控及时发现异常。掌握 Swap 配置与调优,是保障系统稳定性的关键技能。
阅读剩余