帮助中心

服务器、网络和账户的分步教程。

Linux 服务器

Linux VPS 添加 Swap 交换空间教程(适合 512MB / 1GB 小内存套餐)

Linux VPS 添加 Swap 交换空间教程(适合 512MB / 1GB 小内存套餐)

在 512 MB 或 1 GB 的云服务器上,数据库、PHP-FPM 加上一次软件包更新,很容易在同一时间用光内存。这时内核的 OOM killer 会强制终止进程,最常被牺牲的就是 MySQL 或 MariaDB。在 Linux VPS 添加 Swap 交换空间,等于在硬盘上准备一块溢出区,短暂的内存高峰不再让服务崩溃。本文在 Debian、Ubuntu、CentOS、Rocky Linux 与 AlmaLinux 上创建 swap 文件、设置开机自动挂载并调整 swappiness,同时说明小套餐在什么情况下 swap 才真正有帮助。

步骤 1:检查目前的内存与 Swap

先确认服务器有多少 RAM 与 swap、硬盘还剩多少空间,以及内核是否已经因为内存不足而终止过进程。

free -h
swapon --show          # no output = no swap yet
df -h /                # make sure there is enough free disk space
# Has the kernel already killed processes for lack of memory?
journalctl -k | grep -i -E 'out of memory|killed process' 

如果 swapon --show 已经列出设备或文件,也许只需要调整参数(步骤 6),不必再添加一个。

步骤 2:决定合适的 Swap 大小

在 VPS 上,swap 是安全缓冲,不能取代 RAM。常见小套餐可参考下表:

套餐内存建议 Swap说明
512 MB1 GB强烈建议
1 GB1 GB - 2 GB有数据库或控制面板时建议
2 GB1 GB作为安全缓冲
4 GB 以上1 GB - 2 GB 或不设仅作紧急缓冲

swap 文件会占用服务器 SSD 空间,决定大小前请先确认步骤 1 的剩余空间。

步骤 3:用 fallocate 或 dd 创建 Swap 文件

fallocate 能瞬间预留空间;部分文件系统不支持用它创建 swap,这时改用 dd 逐块写入,虽然较慢但一定可行。文件权限必须只有 root 可读写。

# Fast method (ext4, XFS)
fallocate -l 1G /swapfile

# If fallocate fails, or swapon later reports "file has holes", use dd instead
rm -f /swapfile
dd if=/dev/zero of=/swapfile bs=1M count=1024 status=progress

chmod 600 /swapfile
ls -lh /swapfile
Btrfs 上的 swap 文件需要特别处理(停用写时复制),请使用该文件系统的专用方法。若是容器型虚拟化,swap 由宿主机控制,swapon 可能出现“Operation not permitted”。

步骤 4:格式化并启用 Swap(mkswap 与 swapon)

mkswap 写入 swap 标记,swapon 立即启用,不需要重启。

mkswap /swapfile
swapon /swapfile

swapon --show
free -h

步骤 5:写入 /etc/fstab 让 Swap 开机自动启用

没有 fstab 设置,重启后 swap 就会消失。先备份文件、加入一行,再关闭 swap 后用 swapon -a 重新启用来测试——它读取 fstab 的方式和开机流程相同。

cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' >> /etc/fstab

# Test the fstab entry without rebooting
swapoff /swapfile
swapon -a
swapon --show

步骤 6:调整 VPS 的 swappiness

vm.swappiness 决定内核多积极地把内存页搬到 swap。默认值 60 是为桌面环境设计的;服务器设为 10,可让常用数据留在 RAM,只有真正吃紧时才使用 swap。调低 vfs_cache_pressure 则能让文件系统元数据缓存保留久一点。

cat /proc/sys/vm/swappiness        # often 60 by default

# Apply now
sysctl vm.swappiness=10
sysctl vm.vfs_cache_pressure=50

# Keep after reboot
cat > /etc/sysctl.d/99-swap.conf <<'EOF'
vm.swappiness=10
vm.vfs_cache_pressure=50
EOF
sysctl --system

步骤 7:512 MB - 1 GB 套餐什么时候适合用 Swap

swap 适合应付短暂高峰:运行 apt upgrade 或 dnf update、编译软件、Composer 或 npm 安装、夜间备份,或数据库短时间需要更多缓冲。若工作负载长期需要比套餐更多的内存,swap 就无法解决。请检查系统是否持续在使用 swap:

# Watch the si (swap in) and so (swap out) columns for 10 seconds
vmstat 1 10

si、so 偶尔不是 0 没有关系;若长时间数值都很高,代表服务器在频繁换页,整体会变得非常慢。这时请降低内存用量(减少 PHP-FPM worker、缩小数据库缓冲),或把 VPS 升级到内存更大的套餐——JUSTG 云服务器可在客户中心的服务详情页升级套餐。

步骤 8:调整大小或移除 Swap 文件

# Resize to 2 GB or remove swap
swapoff /swapfile
rm -f /swapfile
# To remove completely, also delete the fstab line:
sed -i '\|^/swapfile |d' /etc/fstab
# To resize, repeat Step 3 and Step 4 with the new size (fstab line stays)

常见问题

Swap 会让 SSD 寿命变短吗?

swappiness 设为 10、只在高峰时使用 swap 的情况下,写入量很小。若长时间大量换页,代表需要的是更多 RAM,而不是更多 swap。

Swap 文件会比 Swap 分区慢吗?

在新版内核上差异可以忽略。swap 文件在 VPS 上更容易创建、调整与移除,因此本文采用 swap 文件。

加了 Swap,MySQL 还是被杀掉,怎么办?

请检查 journalctl -k | grep -i oom 与 free -h。若 swap 已用满,请调低 innodb_buffer_pool_size 与Web 服务器 worker 数量,或升级到内存更大的套餐。

如需协助处理服务器的 Swap 或内存问题,请至 https://www.justg.com/submitticket.php 提交工单,JUSTG 技术支持团队会协助您。

这篇文章有帮助吗?
帮助中心
Linux 服务器 Linux SSH 密钥登录教程:设置 ed25519 密钥并禁用密码登录 只要服务器有公网 IPv4,上线几分钟内就会遇到 SSH 暴力破解机器人,而密码登录正是它们的首要目标。本文说明如何用较新的 ed25519 密钥完成 Linux SSH 密钥登录,再禁用 SSH 密码登录,全程避免把自己锁在门外。步骤适用于 Debian… Linux 服务器 Linux VPS 修改 SSH 端口与 root 密码教程(安全不断线) 把 SSH 从 22 端口移走虽然挡不住有心的攻击者,却能让日志里大部分自动扫描消失;而任何新服务器的第一件事,就是换一组新的 root 密码。本文说明如何在 Linux VPS 修改 SSH 端口与 root 密码且不断线:修改 sshd_config、在 Rocky… Linux 服务器 Linux 防火墙设置教程:VPS 使用 UFW 与 firewalld(含 IPv6) 新安装的 Linux 服务器,任何服务打开的端口都会直接对外响应,因此主机防火墙是最先要设置的项目之一。本文说明如何在 Debian / Ubuntu 用 UFW 设置 Linux 防火墙,以及在 CentOS、Rocky Linux、AlmaLinux 使用… Linux 服务器 Linux 硬盘空间已满怎么办?VPS 找出并释放磁盘空间教程 “No space left on device”几乎会让服务器上所有东西出问题:数据库无法写入、网站返回错误、软件包更新失败,有时甚至无法正常登录。本文一步步说明如何排除 Linux 硬盘空间已满:先确认是数据块还是 inode 用完,再用 du 与 ncdu… Linux 服务器 VPS 安装 aaPanel 教程:aaPanel(宝塔国际版)安装与安全设置 aaPanel 是宝塔面板的国际版,通过网页界面即可管理网站、数据库、PHP 版本、SSL 证书与备份。本文说明如何在 JUSTG VPS 安装 aaPanel(东京、首尔、莫斯科的云服务器或 JUSTG 独立服务器,系统支持…
AlipayUnionPayVISAMastercardPayPalUSDTstripe