Linux Swap 添加、删除、调整大小及优先级:让你的系统如虎添翼

前言

购入了一台1核1G的低配VPS,原本计划部署WAF,却因内存捉襟见肘而无法顺利启动。本文将分享如何在小内存VPS上,通过创建Swap分区巧妙地突破内存瓶颈,成功部署应用(测试环境)并提升系统稳定性的实战经验,希望能为同样身处内存困境的朋友们提供一些参考 :handshake:


Swap简介

在Linux系统中,内存管理是保证系统流畅运行的关键。你是否曾遭遇过系统卡顿,甚至在运行大型程序时意外崩溃的窘境? :sad_but_relieved_face: 这很可能源于内存不足。Swap,作为Linux内核中一项重要的内存管理技术,能有效缓解此类问题。本文将由浅入深地剖析Linux Swap的概念、作用、配置方法以及使用注意事项。

Swap(交换空间)本质上是硬盘上预留的一块特殊区域,它被巧妙地用来模拟物理内存(RAM)。 当RAM空间告急时,系统会将暂时不常用的数据“转移”到Swap分区,从而释放宝贵的内存资源,保障关键应用程序的正常运行。 形象地说,Swap就像一个“内存缓冲区”,在系统面临内存压力时,挺身而出,发挥缓冲作用。 :shield:


为何要启用 Swap?它的价值远不止“救急”

你或许会认为,如果RAM足够大,似乎就没有必要使用Swap了。 事实上,Swap的功能和价值远不止于“应急”。 它能为系统带来诸多益处:

  • 避免系统崩溃的“最后防线”:当RAM完全耗尽,且没有Swap可用时,系统很可能会直接停止响应,陷入瘫痪。 Swap的介入,可以暂时接管部分数据,维持系统的基本运行,为我们争取宝贵的排错时间。 :hourglass_not_done:

  • 提升多任务并发处理能力:Swap的存在,使得系统能够承受更高的并发压力,即使应用程序的内存需求超过了RAM的物理上限,也能保持相对稳定。 :person_juggling:

  • 为大型应用提供“虚拟内存扩展”:对于视频编辑软件、虚拟机等资源密集型应用而言,Swap可以提供额外的内存支持,缓解系统卡顿,提升使用体验。 :clapper_board:

需要特别注意的是,Swap并非越多越好。 毕竟,硬盘的读写速度远低于RAM,依赖Swap会导致系统性能急剧下降。 因此,Swap应该视为一种紧急预案,而非主要依赖的资源。 适当地配置Swap,才能在关键时刻发挥它的最大价值。 :+1:


配置 Swap 的步骤

以下以Ubuntu为例,演示如何添加swap。其他发行版的操作类似:

检测现有 Swap

执行以下命令,检查当前系统是否存在swap:

swapon --show

若无输出,则表示没有swap。反之,记录现有配置,以避免潜在冲突。 :memo:

创建 Swap 文件

Swap可采用独立分区或文件形式。 为方便起见,推荐使用文件。 假设需要创建4GB的swap,执行:

sudo fallocate -l 4G /swapfile

该命令将在根目录创建名为/swapfile的4GB文件。 文件大小建议为RAM的1-2倍,具体取决于实际需求和磁盘空间。 :floppy_disk:

设置权限

为确保安全性,限制文件权限,仅允许root用户访问:

sudo chmod 600 /swapfile

标记为 Swap

通知系统,该文件将被用作swap空间:

sudo mkswap /swapfile

启用 Swap

启动swap:

sudo swapon /swapfile

永久生效

若不进行设置,重启后swap将失效。编辑/etc/fstab文件:

sudo nano /etc/fstab

在文件末尾添加一行:

/swapfile none swap sw 0 0

保存并退出。 此配置将在下次启动时自动启用swap。 :gear:

验证配置

最后,验证swap是否正常工作:

swapon --show
free -h

swap行显示数据,则配置成功。最后附上截图:


Linux Swap 优先级调整

:magnifying_glass_tilted_left: 什么是 Swap 优先级?

Swap 优先级通过 vm.swappiness 参数控制(范围 0-100),该值决定系统使用物理内存和Swap空间的倾向性

  • 高值(60-100):积极使用Swap,适合普通桌面环境
  • 低值(0-30):尽量避免Swap,适合数据库/实时系统
  • 极端值 0:内存耗尽前禁用Swap(但不会完全阻止)

:gear: 查看当前优先级

# 查看当前 swappiness 值
cat /proc/sys/vm/swappiness
# 典型输出:60(默认值)

这<binary data, 1 bytes><binary data, 1 bytes><binary data, 1 bytes>张截图展示了在终端中使用 `cat` 命令查看 `/proc/sys/vm/swappiness` 文件的内容,结果显示为 60。 (由 AI 生成标题)

:hammer_and_wrench: 调整优先级方法

临时修改(立即生效)

# 设置为保守模式(推荐数据库服务器) 
sudo sysctl vm.swappiness=10 
# 激进模式(老旧设备适用)
 sudo sysctl vm.swappiness=80

永久修改

# 编辑 sysctl 配置文件
sudo nano /etc/sysctl.conf

# 在文件末尾添加(示例设为20)
vm.swappiness=20

# 使配置立即生效(无需重启)
sudo sysctl -p

停用与删除 Swap

# 停用 Swap
sudo swapoff /swapfile

# 删除配置(编辑 /etc/fstab 删除对应行)
sudo sed -i '/\/swapfile/d' /etc/fstab

# 彻底删除文件
sudo rm -f /swapfile

# 验证清除结果
swapon --show  # 无输出表示成功

Swap 使用须知

配置swap并不复杂,但使用时需注意以下事项:

  • 适度分配:过大的swap不仅浪费磁盘空间,还会急剧降低系统性能。 仅需满足基本需求,避免过度分配,可以参考下这个表格:
内存 (Memory) Swap 大小 (Swap Size) 备注 (Remarks)
≤ 4GB 内存的 1~2 倍 (2 times the Memory) 如:2GB 内存 → 4GB Swap,覆盖休眠需求 (e.g. 2GB Memory → 4GB Swap, covers hibernation needs)
4-64GB 内存的 1-1.5 倍 (1-1.5 times the Memory) 根据经验不要超过8g比较好
≥ 64GB 4~16GB 仅应急 (Emergency use only)
  • 选择存储介质: 优先将swap放置在SSD上。 机械硬盘速度较慢,会降低swap的效果:high_voltage:

  • 定期监控: 使用free -htop命令监控swap的使用情况。 若swap长期处于高负荷状态,可能需要考虑增加RAM :bar_chart:

  • 安全至上: Swap可能存储敏感数据,如密码。 建议在关机时清空swap,或对其进行加密,防止数据泄露。:locked:


总结

至此,相信你已对swap有了了解。合理利用swap,可增强Linux系统的稳定性和性能,尤其是在内存受限的情况下,swap可作为重要的保障措施。
如果文章对你有所帮助的话点个 :heart:支持下吧!有疑问或心得,欢迎留言讨论或者加入论坛讨论更多运维经验
版权声明:原创文章,引用请注明原文链接,不允许全文复制粘贴。