# 内存与 Swap：先看压力，再调整容量

Swap 使用量不为零，并不自动表示系统故障。真正需要关注的是可用内存、交换活动、延迟和是否出现进程被内核终止。

更新日期：2026-09-16

规范地址：https://stock.iftalking.com/guides/memory-swap/

## 1. 内存使用率高，不一定代表内存不够

Linux 会把空闲内存用于缓存，便于下次更快读取文件。判断是否缺内存，先看 available、Swap 活动和应用是否被 OOM 终止，而不是只看控制面板的一条红色进度条。

```bash
free -h
swapon --show
vmstat 1 10
```

`free` 的 available 是系统估算可供新应用使用的内存；`vmstat` 的 si/so 是换入换出活动。Swap 已使用但 si/so 长期接近零，可能只是历史上换出的冷数据，不必为了“变绿”强制清空。

![面板资源信息用于观察趋势，具体原因还需查看系统进程](https://stock.iftalking.com/tutorial-media/provider-kiwivm-overview.jpg)

*图示说明：服务商官方知识库公开截图（旧版界面），用于对照功能名称；当前菜单位置可能调整。图中的套餐、IP、端口和日期仅为示例。*

## 2. 先找占用者和 OOM 记录

```bash
ps -eo pid,user,%mem,rss,comm --sort=-rss | head -15
sudo journalctl -k --since '24 hours ago' --no-pager | grep -i -E 'out of memory|killed process|oom'
```

RSS 通常以 KiB 计，适合初步找占用较大的进程，但共享内存会影响相加结果。PHP 进程太多、数据库缓存过大、容器没有资源约束，都可能挤压小内存实例。先降低不必要的并发或修复泄漏，再决定增加 Swap 或升级内存。

## 3. 在合适的文件系统上创建 Swap 文件

下面示例适用于普通 ext4 文件系统，创建一个新的 1 GiB Swap 文件。先确认磁盘有足够空间、路径不存在，并检查是否已经配置 Swap。Btrfs、稀疏文件和部分存储布局有额外要求，应使用对应文件系统文档。

```bash
sudo sh -eu <<'SWAP_SETUP'
if [ -e /swapfile ]; then
  echo '/swapfile 已存在，请先检查；本次未修改。' >&2
  exit 1
fi
dd if=/dev/zero of=/swapfile bs=1M count=1024 status=progress
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
SWAP_SETUP
swapon --show
```

脚本发现已有路径会立即停止；其中任何创建或启用步骤失败也会停止。`mkswap` 只能用于自己新建的 Swap 文件，绝不能指向已有数据分区。失败后先检查原因，不要为了重试随意删除已有文件。

## 4. 验证后再加入启动配置

备份 `/etc/fstab`，确认没有同一条记录，再增加：

```text
/swapfile none swap sw 0 0
```

用 `swapon --show` 与 `free -h` 确认启用，下一次计划重启后再检查是否自动加载。`vm.swappiness` 控制内核换页倾向，但合适值取决于工作负载；不要把某个网络流传数值当成所有 VPS 的最佳值。

## 5. 扩大或移除 Swap 时注意剩余内存

关闭 Swap 会把需要的页面搬回内存，内存不足时可能失败或引发压力。先降低业务负载，确认可用内存，再对明确的 Swap 文件执行 swapoff；不必为了改大小停掉所有 Swap。

持续大量换页通常意味着工作集超过了物理内存。Swap 能减少突然 OOM 的机会，但磁盘速度远低于内存，不能把 1 GiB 实例变成真正的 8 GiB 实例。继续看[进程监控](https://stock.iftalking.com/guides/process-monitoring/)和[升级套餐](https://stock.iftalking.com/guides/upgrade-plan/)。


## 完成后检查

调整后观察真实业务延迟和 OOM 日志。不要只以面板颜色判断是否需要加倍 Swap。

## 参考资料

- [Ubuntu Server 文档](https://documentation.ubuntu.com/server/)
- [服务商官方说明](https://bandwagonhost.com/kb.php?action=displayarticle&id=30)
