腾讯云 CVM 内存不足频繁 Swap 交换怎么优化配置?
腾讯云 CVM 实例默认不划分 Swap 分区,当物理内存剩余小于总内存的 20% 时系统会频繁触发 Swap 交换,通过创建 2 倍物理内存大小的 Swap 文件可将编译等内存密集型任务的崩溃率降低 80% 以上。
原因分析
腾讯云主机默认没有划分 Swap 分区,使用 free 命令查看会发现 swap 分区大小为 0。当系统物理内存不够时,内核会将不常用的数据从内存移到磁盘上 (Swap out),但如果没有配置 Swap 空间,内存耗尽时会直接触发 OOM Killer 机制终止进程。根据腾讯云开发者社区的实际案例,编译 C++ 项目时单个 cc1plus 进程可能消耗 500MB-2GB 内存,在 1.6GB 的服务器上加上系统和其他进程的占用,内存很容易耗尽导致服务器中断重连。
Linux 内存管理中,真实的可用内存=物理内存–应用占用–File Cache,内核会尽可能利用空闲内存做缓存。当 Swappiness 参数 (范围 0-100) 配置过高时,内核会过早启用 Swap,即使物理内存还有剩余也会开始交换。
解决方案
方案一:创建 Swap 文件(推荐小内存实例)
适用于物理内存≤4GB 的开发测试环境,Swap 建议值为 2 倍物理内存。具体操作步骤:
1. 创建 4GB 的 swap 文件:sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
2. 设置正确权限 (只有 root 可读写):sudo chmod 600 /swapfile(注意:权限设置为 0644 会报错"mkswap:/tmp/swapfile:不安全的权限 0644,建议使用 0600")
3. 格式化为 swap 文件系统:sudo mkswap /swapfile
4. 启用 swap:sudo swapon /swapfile
5. 验证 swap 是否生效:free -h
6. 永久设置,添加到/etc/fstab:echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
方案二:按内存容量配置 Swap 大小
参照 Oracle 官方文档设定的标准配置:
| 物理内存 | Swap 建议值 | 适用场景 |
|---|---|---|
| 4G 以内 | 2 倍物理内存 | 开发测试环境 |
| 4-8G | 等于内存大小 | 中小型生产环境 |
| 8-64G | 8G | 中大型生产环境 |
| 64-256G | 16G | 大型生产环境 |
方案三:调整 Swappiness 参数
首先查看当前 swappiness 值:cat /proc/sys/vm/swappiness
临时调整(重启失效):sudo sysctl vm.swappiness=10
永久调整,添加到/etc/sysctl.conf:vm.swappiness=10
建议生产环境设置为 10-30,开发测试环境可设置为 60-80。
方案四:使用 Swap 分区而非 Swap 文件
运行速度对比:物理内存 > swap 分区 > swap 文件。如果有独立磁盘分区,可创建 swap 分区:
sudo mkswap /dev/sdb4
sudo swapon /dev/sdb4
对于 LVM 形式:sudo lvextend -L 4G /dev/vg1/swap
注意事项
1. SSD 存储警告:腾讯云开发者社区明确指出,对于 SSD 来说,使用 swap 可能会导致硬件随着时间的推移而出现问题,不建议在任何使用 SSD 存储上启用 swap,这样做会影响底层硬件的可靠性。本方案更建议采用传统机械硬盘的用户使用。
2. 过度依赖 Swap 风险:警告显示过度依赖 Swap 会导致磁盘 I/O 飙升,建议配合升级物理内存方案使用。当 Swap 的 used 值大于 0 时,表示操作系统物理内存不够,已经开始使用硬盘内存了。
3. 内存监控阈值:如果机器剩余内存非常小,一般小于总内存的 20%,则判断为系统物理内存不够,需要留意当前系统内存使用情况及负载。
4. 腾讯云内存型 M4 实例:对于高性能数据库、分布式内存缓存等需要大量内存操作的应用,建议选择内存型 M4 云服务器,配备 2.4GHz Intel® Xeon® Skylake 6148 处理器,适合基因计算、自行搭建 Hadoop 集群或 Redis 的用户。
5. 验证命令:使用sudo swapon --show查看系统是否已配置 swap,如果没有收到任何输出,意味着系统当前没有可用的 swap 空间。
参考来源
来源:腾讯云开发者社区 - 腾讯云服务器没内存怎么办
来源:腾讯云百科 - 腾讯云内存型 m4 云服务器配置 cpu 内存性能注意事项
来源:Linux 实战教程 - 云服务器内存不足?手把手教你用 Swap 解决 C++ 编译内存问题
来源:腾讯云开发者社区 - 购买的云主机内存不足量怎么办?5 种实用解决方案全解析