BWH Compass

内存与 Swap:先看压力,再调整容量

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

BWH Compass 编辑整理更新于 约 4 分钟阅读

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

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

bash
free -h
swapon --show
vmstat 1 10

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

面板资源信息用于观察趋势,具体原因还需查看系统进程
服务商官方知识库公开截图(旧版界面),用于对照功能名称;当前菜单位置可能调整。图中的套餐、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 --showfree -h 确认启用,下一次计划重启后再检查是否自动加载。vm.swappiness 控制内核换页倾向,但合适值取决于工作负载;不要把某个网络流传数值当成所有 VPS 的最佳值。

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

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

持续大量换页通常意味着工作集超过了物理内存。Swap 能减少突然 OOM 的机会,但磁盘速度远低于内存,不能把 1 GiB 实例变成真正的 8 GiB 实例。继续看进程监控升级套餐

完成后检查

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

官方资料与相关入口