|
|
在云主机上配置Swap交换分区并优化内存使用,可以有效提升系统在内存不足时的稳定性,避免OOM(Out Of Memory)问题。以下是详细的配置步骤和优化建议:
一、Swap交换分区的作用
- 功能:当物理内存(RAM)不足时,Swap分区作为虚拟内存,将部分不活跃的内存页交换到磁盘,释放物理内存供活跃进程使用。
- 适用场景:内存较小的云主机、突发流量导致内存峰值、内存密集型应用(如数据库、Java应用)。
二、配置Swap交换分区
1. 检查现有Swap- free -h # 查看内存和Swap使用情况
- swapon --show # 列出已启用的Swap分区
复制代码
2. 创建Swap文件
推荐使用文件而非分区(灵活且无需调整磁盘分区):- # 创建Swap文件(例如4GB)
- sudo fallocate -l 4G /swapfile
- # 或使用dd命令(兼容性更好)
- sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
- # 设置权限(仅root可读写)
- sudo chmod 600 /swapfile
复制代码
3. 格式化并启用Swap- sudo mkswap /swapfile # 格式化为Swap格式
- sudo swapon /swapfile # 立即启用
复制代码
4. 永久生效
编辑,添加以下行:- /swapfile none swap sw 0 0
复制代码
5. 调整Swap优先级(多Swap时)- sudo swapon --priority 1 /swapfile # 优先级越高(数值大),系统越优先使用
- # 或通过/etc/fstab指定:
- # /swapfile none swap sw,pri=1 0 0
复制代码
三、Swap性能优化
1. 调整Swappiness参数
- 作用:控制内核使用Swap的倾向程度(0~100)。
- 值较低(如10):优先使用物理内存,减少Swap使用(适合高性能场景)。
- 值较高(如60):更积极地使用Swap(适合内存紧张的环境)。
- # 查看当前值
- cat /proc/sys/vm/swappiness
- # 临时修改(重启失效)
- sudo sysctl vm.swappiness=10
- # 永久修改
- echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
复制代码
2. 调整Cache压力(vfscachepressure)
- 作用:控制内核回收缓存的倾向。降低该值可保留更多文件系统缓存,提升I/O性能。
- # 临时修改
- sudo sysctl vm.vfs_cache_pressure=50
- # 永久修改
- echo "vm.vfs_cache_pressure=50" | sudo tee -a /etc/sysctl.conf
复制代码
四、Swap大小建议
- 内存≤2GB:Swap大小设为物理内存的2倍。
- 内存2GB~8GB:Swap大小等于物理内存。
- 内存≥8GB:Swap大小可设为4GB~物理内存大小(根据实际需求调整)。
- 注意:云主机磁盘I/O性能可能影响Swap效率,避免过度依赖Swap。
五、监控与维护
- vmstat 1 5 # 每隔1秒输出一次,共5次,关注si(swap in)、so(swap out)
复制代码
- sync; echo 3 > /proc/sys/vm/drop_caches # 清理PageCache、dentries、inodes
复制代码
六、替代方案与注意事项
- 升级物理内存:若频繁使用Swap,优先考虑扩容RAM。
- 优化应用内存:
- 调整JVM堆大小(参数)。
- 使用内存数据库(如Redis)替代磁盘存储。
- 避免Swap风暴:
- 监控系统负载,设置内存告警。
- 限制单个进程的内存使用(如或容器资源限制)。
七、删除Swap文件(如需)- sudo swapoff /swapfile # 停用Swap
- sudo rm /swapfile # 删除文件
- # 并从/etc/fstab中移除对应行
复制代码
总结
合理配置Swap和优化内存参数,可以在云主机资源有限时保障系统稳定性。建议结合监控工具(如、)持续观察内存和Swap使用情况,动态调整配置。 |
|