小内存服务器遇到流量高峰就崩溃?这不是代码问题,是内存管理策略的缺失。当物理内存耗尽时,Linux内核会直接杀掉占用内存最多的进程——这种OOM Killer机制在生产环境中堪称灾难。交换分区(Swap)的价值在于给内核一个缓冲地带:把不活跃的内存页暂时移到磁盘,换取系统继续运行的空间。

Ubuntu 26.04的交换配置流程比想象中简洁。本文记录一次完整的2GB交换文件部署,从创建到持久化,再到针对服务器场景的参数调优。

打开网易新闻 查看精彩图片

第一步:确认现状

动手前先看清系统状态。执行free -h,如果Swap行显示0B,说明当前没有配置交换空间。这个确认步骤不能省——有些云镜像会预分配交换分区,重复配置反而混乱。

第二步:创建交换文件

三条命令完成核心操作:

1. 分配2GB磁盘空间:sudo fallocate -l 2G /swapfile

2. 设置权限为仅root可读写:sudo chmod 600 /swapfile

3. 格式化为交换格式:sudo mkswap /swapfile

权限设置是关键细节。内核会拒绝任何全局可读的交换文件,这是安全机制而非建议。如果跳过chmod 600,后续启用时会直接报错。

第三步:激活并验证

执行sudo swapon /swapfile立即生效。用sudo swapon --show查看激活状态,再用free -h确认Swap行已显示2.0Gi。此时交换空间已可用,但有一个陷阱:swapon的激活是临时的,重启后失效。

第四步:持久化配置

让交换文件开机自动挂载需要修改/etc/fstab。操作前务必备份原文件:sudo cp /etc/fstab /etc/fstab.bak

追加配置项的命令:echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab。最后用grep swap /etc/fstab确认写入无误。至此,交换空间的生命周期管理完成。

第五步:调优swappiness

默认swappiness值通常是60,对桌面系统友好,对服务器偏激进。该参数控制内核将内存页移入交换空间的积极程度,范围0-100。

查看当前值:cat /proc/sys/vm/swappiness。修改为10的操作:编辑/etc/sysctl.conf,添加vm.swappiness=10,执行sudo sysctl -p立即生效。

这个保守值让内核尽可能保留数据在物理内存,仅在必要时才动用磁盘交换——SSD虽快,终究是内存速度的百分之一。

配置完成。交换空间现在随系统启动自动加载,参数也针对服务器负载优化。对于内存吃紧的Web服务、数据库中间件或容器节点,这套基础配置能显著降低突发流量导致的进程被杀风险。

交换文件而非交换分区的设计,让容量调整变得灵活。2GB是起点,后续可根据监控数据用sudo swapoff /swapfile卸载后重新分配。磁盘空间比内存便宜,但I/O性能瓶颈始终存在——交换是保险,不是性能解药。