Linux 服务器运维笔记:分配虚拟内存 (Swap) 避坑与实操#
0. 背景与目标#
在小内存(如 1GB RAM)的云服务器上运行 Java、MySQL 或进行前端构建时,物理内存极易耗尽导致进程被系统杀掉(OOM)。Swap(交换空间) 充当了“虚拟内存”的角色,是服务器在高负载下的“救命支撑”。
本次任务目标:
- 处理系统预设的 Swap 环境。
- 手动分配 2GiB 的 Swap 空间。
- 实现开机自动挂载与内核参数优化。
1. 环境预处理:清理旧空间#
由于某些供应商(如 RackNerd)预装镜像自带了 1GiB 的 Swap,为了扩容并统一管理,先将其关闭:
# 查看当前内存与 Swap 状态
free -h
# 关闭所有当前的 Swap 空间
sudo swapoff -a2. 核心操作步骤#
第一步:分配空间#
在根目录下创建一个 2GiB 的空文件。建议使用 fallocate,它比传统的 dd 命令更快。
sudo fallocate -l 2G /swapfile注:若提示不支持
fallocate,可改用以下命令:sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
第二步:安全权限加固#
Swap 文件涉及内存数据,必须限制仅 root 用户可读写,防止敏感信息泄露。
sudo chmod 600 /swapfile第三步:格式化与激活#
将该文件转化为 Swap 格式并通知系统立即启用。
sudo mkswap /swapfile
sudo swapon /swapfile第四步:持久化配置(开机自启)#
编辑 /etc/fstab 文件,确保服务器重启后 Swap 依然有效。
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab3. 极客优化:Swappiness 调优#
swappiness 参数(0-100)控制系统使用 Swap 的积极程度。
- 默认值:
60(对于小内存 VPS 来说太频繁,会导致磁盘 I/O 过高)。 - 建议值:
10(尽可能使用物理内存,物理内存不足时才使用 Swap)。
# 临时生效
sudo sysctl vm.swappiness=10
# 永久生效
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf4. 验证结果#
最后通过以下命令确认成果:
free -h预期输出: Swap 栏位的 total 应显示为 2.0Gi。


