云服务器中的虚拟内存
本文首次创作于 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. 虚拟内存的优缺点
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 内存很容易被系统进程(如
systemd
、apt
)占满,Swap 能提高稳定性。
❌ 可以不开启 Swap 的情况:
纯静态网站(如 Nginx + HTML):内存需求低,可能用不到 Swap。
短期测试环境:如果服务器只是临时使用,可以不加 Swap。
SSD 磁盘性能敏感型应用:频繁 Swap 读写可能拖慢速度(但对 1G 内存的小服务器影响有限)。
(2)建议的 Swap 大小
(3)结论
1GB 内存的服务器,Swap 设为 1GB 是比较合理的默认选择。
总结
虚拟内存(Swap) 是云服务器在物理内存不足时的“备用内存”,通过磁盘空间扩展可用内存。
推荐小内存服务器开启 Swap(如 1GB/2GB),但大内存服务器(如 8GB+)可以关闭或减少 Swap 使用。
Swap 会影响性能,优化代码或升级内存才是根本解决方案。
- 感谢你赐予我前进的力量