本文首次创作于 2025-02-15,最后更新于 2025-05-23,距离上次更新已经过了 13 天,文章内容可能已经过时。

云服务器中的虚拟内存

云服务器的 虚拟内存(Virtual Memory) 是一种内存管理技术,它通过 结合物理内存(RAM)和磁盘空间(Swap),让系统能够运行比实际物理内存更大的应用程序。当物理内存不足时,系统会将部分不常用的内存数据临时存储到磁盘上的 Swap 分区(交换分区),从而避免因内存不足导致程序崩溃或系统卡死。

1. 虚拟内存的作用

  • 扩展可用内存:当物理内存(RAM)不足时,系统将部分数据交换到磁盘(Swap),腾出 RAM 给更重要的任务。

  • 防止 OOM(Out of Memory):避免因内存耗尽导致进程被强制终止。

  • 提高系统稳定性:即使物理内存紧张,系统仍能继续运行(但速度会变慢)。


2. 云服务器上的虚拟内存实现方式

在 Linux 系统中,虚拟内存通常通过 Swap 分区Swap 文件 实现:

  • Swap 分区:单独划分一块磁盘空间用于交换(传统方式)。

  • Swap 文件:在现有文件系统中创建一个文件作为交换空间(更灵活,适用于云服务器)。


3. 查看虚拟内存(Swap)使用情况

 free -h

输出示例:

               total        used        free      shared  buff/cache   available
 Mem:           2.0G        1.2G        200M         50M        600M        600M
 Swap:          1.0G        300M        700M
  • Mem:物理内存使用情况。

  • Swap:虚拟内存(交换空间)使用情况。


4. 如何为云服务器添加 Swap 虚拟内存?

(1)创建 Swap 文件(推荐)

 # 1. 创建一个 2GB 的 Swap 文件(大小可调整)
 sudo fallocate -l 2G /swapfile
 ​
 # 2. 设置权限,防止被篡改
 sudo chmod 600 /swapfile
 ​
 # 3. 格式化为 Swap 文件系统
 sudo mkswap /swapfile
 ​
 # 4. 启用 Swap
 sudo swapon /swapfile
 ​
 # 5. 永久生效(重启后仍有效)
 echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

(2)调整 Swap 使用策略(可选)

Linux 默认倾向于使用物理内存,仅在必要时使用 Swap。可以通过 swappiness 调整策略:

# 查看当前值(默认 60,范围 0-100)
cat /proc/sys/vm/swappiness

# 临时调整(设为 10,减少 Swap 使用)
sudo sysctl vm.swappiness=10

# 永久生效
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
  • swappiness=0:尽量不用 Swap(可能导致 OOM)。

  • swappiness=100:积极使用 Swap(可能降低性能)。


5. 虚拟内存的优缺点

优点

缺点

✔️ 防止内存不足崩溃

❌ 磁盘读写比 RAM 慢(性能下降)

✔️ 扩展可用内存

❌ 频繁使用 Swap 可能导致 I/O 瓶颈

✔️ 提高系统稳定性

❌ SSD 频繁写入可能影响寿命


6. 适用场景

  • 小内存云服务器(如 1GB/2GB):建议开启 Swap,避免 OOM。

  • 高负载应用:如果内存经常耗尽,Swap 可以临时缓解问题(但优化代码或升级内存更好)。

  • 临时任务:运行短期大内存任务时,可临时启用 Swap。


7. 如何关闭 Swap?

# 1. 停用 Swap
sudo swapoff /swapfile

# 2. 删除 Swap 文件
sudo rm /swapfile

# 3. 从 /etc/fstab 删除对应行
sudo sed -i '/\/swapfile/d' /etc/fstab

8. 实例分析:1G 内存的服务器是否需要 Swap

(1)内存的服务器是否需要 Swap?

✅ 推荐开启 Swap 的情况:

  • 运行 MySQL、Redis、Java 等内存敏感服务:这些应用可能突然占用大量内存,Swap 可以防止进程被 OOM Killer 强制杀死。

  • 运行业务波动较大的应用:比如突发流量导致内存短期飙升,Swap 能提供缓冲。

  • 防止系统崩溃:1GB 内存很容易被系统进程(如 systemdapt)占满,Swap 能提高稳定性。

❌ 可以不开启 Swap 的情况:

  • 纯静态网站(如 Nginx + HTML):内存需求低,可能用不到 Swap。

  • 短期测试环境:如果服务器只是临时使用,可以不加 Swap。

  • SSD 磁盘性能敏感型应用:频繁 Swap 读写可能拖慢速度(但对 1G 内存的小服务器影响有限)。


(2)建议的 Swap 大小

物理内存(RAM)

推荐 Swap 大小

适用场景

1GB

1GB

通用推荐值(平衡性能与稳定性)

1GB

512MB

如果磁盘空间紧张或只需轻度缓冲

1GB

2GB

运行内存消耗较大的应用(如 Java)

(3)结论

1GB 内存的服务器,Swap 设为 1GB 是比较合理的默认选择。

总结

  • 虚拟内存(Swap) 是云服务器在物理内存不足时的“备用内存”,通过磁盘空间扩展可用内存。

  • 推荐小内存服务器开启 Swap(如 1GB/2GB),但大内存服务器(如 8GB+)可以关闭或减少 Swap 使用。

  • Swap 会影响性能,优化代码或升级内存才是根本解决方案。