导读:本期聚焦于小伙伴创作的《Linux云服务器如何设置swap虚拟内存解决内存不足问题》,敬请观看详情。当云服务器物理内存耗尽导致进程被强制杀死时,临时扩充可用内存的最快办法就是启用swap空间。swap是把磁盘的一部分当作内存来用,内核在内存紧张时会把不常用的页换出到这块区域。本文说明怎样用fallocate或dd创建swap文件,用mkswap初始化并用swapon启用,以及通过fstab实现开机自动挂载。同时会解释swappiness参数对交换积极程度的影响,提醒固态盘场景下频繁交换可能拖累IO性能,并给出调整优先级与容量的实践建议,帮助你在低配实例上平稳运行服务。

在Linux云服务器上,当物理内存不足以支撑所有进程运行时,系统可能触发OOM Killer终止关键服务。通过设置swap虚拟内存,可以利用磁盘空间模拟额外内存,缓解瞬时内存压力。swap既可以是独立分区,也可以是普通文件,对多数云主机而言,创建swap文件比调整分区更灵活。

Linux云服务器如何设置swap虚拟内存解决内存不足问题

一、什么是swap以及它为什么有用

swap是Linux内核提供的虚拟内存机制,它将磁盘上的一块空间作为内存的补充。当物理内存(RAM)使用率达到临界值,内核的内存管理子系统会根据LRU算法,把近期较少访问的匿名页或缓存页写入swap空间,从而腾出RAM给更活跃的进程。这种机制避免了程序因申请不到内存而直接崩溃。

对于云服务器尤其是入门级实例,往往只配备1GB或2GB内存,运行MySQL、Redis或编译任务时很容易占满。此时若没有swap,轻则服务不可用,重则系统卡死。合理配置swap能给运维人员留出应急处理时间。但需要注意,swap的读写速度远低于RAM,过度依赖会造成延迟升高,因此它只是缓冲而非替代物理内存。

二、创建swap文件的两种常用方式

在云环境中,磁盘通常已分区且不便重划,因此用文件充当swap最方便。fallocate命令能瞬间分配指定大小的文件,适用于支持稀疏文件的文件系统如ext4、xfs。

# 创建一个2GB大小的swap文件
sudo fallocate -l 2G /swapfile

# 如果fallocate不可用,可用dd逐块写入(较慢)
# sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

创建后必须限制权限,否则其他用户可能读取到内存中的敏感数据。随后用mkswap对文件做swap格式化,让内核识别其结构。

# 设置仅root可读写
sudo chmod 600 /swapfile

# 初始化为swap区域
sudo mkswap /swapfile

# 立即启用
sudo swapon /swapfile

# 查看是否生效
sudo swapon --show

三、开机自动挂载swap

上述swapon命令只在当前运行环境有效,重启后失效。为保证云服务器每次启动都加载swap,需要写入/etc/fstab。该文件记录了挂载信息,系统初始化时会自动处理。

# 备份原文件
sudo cp /etc/fstab /etc/fstab.bak

# 追加一行(使用echo或vim编辑均可)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# 校验语法错误(挂载所有fstab项,无报错即正常)
sudo mount -a

添加完毕后,可用free -h命令观察swap行是否显示对应容量。若重启后未生效,应检查文件路径权限及fstab条目拼写。某些云镜像默认禁用swap,还需确认没有在/etc/rc.local中被关闭。

四、调整swappiness优化交换行为

swappiness是内核参数,取值范围0到100,控制倾向使用swap的程度。值越高,越积极把页面换出;值越低,越尽量保留在RAM。默认常为60,对内存小的云服务器可适度调低以减少磁盘IO。

swappiness值行为特征适用场景
10仅必要时交换数据库等低延迟服务
60平衡策略通用应用服务器
100激进交换极度缺内存且可接受慢

修改方式如下,临时生效用sysctl,永久则写入配置文件:

# 临时设为10
sudo sysctl vm.swappiness=10

# 永久生效
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

需注意,swappiness调低不代表不会用swap,只是推迟。若物理内存真不够,仍会交换。另外在SSD云盘上,频繁交换会消耗写入寿命并引起IO抖动,建议配合监控观察si、so字段。

五、关闭与删除swap的正确步骤

当升级了云服务器内存套餐,或swap引起性能问题,可安全卸除。必须先swapoff再删除文件,否则正在使用的页无法释放会导致错误。

# 停用swap文件
sudo swapoff /swapfile

# 从fstab移除对应行(手动编辑删掉那一行)
# 然后删除文件
sudo rm /swapfile

# 确认已无swap
free -h

如果曾修改swappiness且不再需要,也可从/etc/sysctl.conf移除该行。整个操作过程不影响在线服务,因为swapoff会将页面移回RAM,前提是RAM当时有足够空闲,因此建议在低负载时执行。

六、容量规划与注意事项

传统经验是swap设为RAM的1到2倍,但现代云主机有不同考量。对小于2GB内存的实例,设2GB swap较稳妥;对4GB以上实例,1GB到2GB通常足够应对突发。数据库类应用应少依赖swap,优先加内存。

此外,部分云厂商的突发性能实例在大量磁盘读写时会被限流,swap可能加剧卡顿。此时用ionice调整优先级或迁移到计算优化型实例更合理。总之,swap是兜底手段,监控内存趋势与及时扩容才是根本解法。

Linuxswap云服务器修改时间:2026-08-01 04:30:30

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。