甲骨文云 Ubuntu 系统如何交换分区防止内存不足?

文章导读
在甲骨文云 Ubuntu 实例上,创建交换文件(Swap File)是防止因内存不足导致进程被杀的最直接方案,适合内存较小且无法立即升级配置的临时或轻量场景。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

在甲骨文云 Ubuntu 实例上,创建交换文件(Swap File)是防止因内存不足导致进程被杀的最直接方案,适合内存较小且无法立即升级配置的临时或轻量场景。

先说结论:增加交换分区能避免系统因内存耗尽直接崩溃,但会牺牲读写速度,不能作为长期性能解决方案。

  • 适合:内存小于 2GB 的免费层实例,或运行偶尔峰值负载的非核心业务。
  • 先准备:确认 boot 卷剩余磁盘空间充足,避免填满磁盘导致系统无法写入日志。
  • 验收:使用 free -h 确认 swap 总量变化,并观察系统负载是否因频繁交换而过高。

命令速用版

如果你需要快速创建一个 2GB 的交换文件并启用,可依次执行以下命令:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

若提示 fallocate 不支持,可改用 dd 命令创建,但速度稍慢。

为什么会这样

甲骨文云免费层实例(尤其是 ARM 架构)通常配备的内存有限,当运行多个服务或编译大型项目时,物理内存容易被耗尽。Linux 内核为了保护系统稳定性,会触发 OOM Killer 机制强制杀死占用内存最高的进程。交换分区的作用是将部分不常用的内存数据临时写入磁盘,腾出物理内存给活跃进程使用。这本质上是用磁盘空间换内存空间,磁盘读写速度远低于内存,因此只能作为防止崩溃的缓冲,而非性能提升手段。

分步处理

1. 检查现有交换空间
执行以下命令查看当前是否已有 swap:

sudo swapon `--show`
free -h

如果 Swap 行显示为 0 或空,说明需要创建。

甲骨文云 Ubuntu 系统如何交换分区防止内存不足?

2. 确认磁盘空间
使用 df -h 查看根目录剩余空间,确保至少有计划创建的 swap 文件大小加上预留缓冲(建议至少保留 1GB 余量)。

df -h /

3. 创建交换文件
推荐使用 fallocate 快速分配空间。如果文件系统不支持,改用 dd if=/dev/zero of=/swapfile bs=1M count=2048。

4. 设置权限与格式化
出于安全考虑,交换文件权限必须设为 600,否则系统可能拒绝启用。随后初始化为 swap 格式:

sudo chmod 600 /swapfile
sudo mkswap /swapfile

5. 启用并持久化
使用 swapon 立即生效,并写入 /etc/fstab 确保重启后依然有效。写入前建议备份 fstab 文件,防止配置错误导致无法启动。

怎么验证是否生效

1. 状态检查
再次运行 free -h 或 swapon `--show`,Swap 总量应显示为你设置的大小(如 2.0G)。

甲骨文云 Ubuntu 系统如何交换分区防止内存不足?

2. 压力测试观察
在业务运行时观察 swap 使用量。如果 Swap 使用率长期接近 100% 且系统响应极慢,说明物理内存严重不足,应考虑升级实例配置而非继续增加 swap。

3. 日志排查
查看 /var/log/syslog 或 dmesg 日志,确认不再频繁出现 Out of memory: Kill process 相关报错。

常见坑

1. 磁盘写满风险:甲骨文云免费实例 boot 卷默认较小,若分配过大 swap 文件,可能导致日志无法写入甚至系统宕机。

2. fstab 配置错误:修改 /etc/fstab 时若语法错误(如空格缺失),重启可能导致系统进入 emergency mode。务必先备份。

3. 性能误解:不要指望 swap 能提升数据库或高并发服务性能。频繁 swap 会导致 I/O 等待升高,反而拖慢系统。

4. 实例重启失效:若忘记写入 /etc/fstab,重启后 swap 会消失,需重新执行启用命令。

参考来源

  • Ubuntu Community Help, "SwapFaq", https://help.ubuntu.com/community/SwapFaq
  • Oracle Cloud Documentation, "Managing Compute Instances", https://docs.oracle.com/en-us/iaas/Content/Compute/Tasks/managinginstances.htm
  • Linux Man Pages, "swapon(8)", https://man7.org/linux/man-pages/man8/swapon.8.html