当CentOS系统遇到swap空间不足的情况时,可以采取以下几种方法来解决:
增加Swap分区或文件
- 创建Swap文件:
- 使用
dd命令创建一个指定大小的swap文件。例如,创建一个4GB的交换文件:
sudo dd if=/dev/zero of=/swapfile bs=1G count=4
- 设置文件权限:
sudo chmod 600 /swapfile
- 格式化文件为Swap格式:
sudo mkswap /swapfile
- 启用新的Swap文件:
sudo swapon /swapfile
- 确认Swap变更:
free -h
- 永久生效,编辑
/etc/fstab文件,添加以下内容:
/swapfile swap swap defaults 0 0
- 扩展现有Swap分区(如果Swap是分区):
- 关闭当前Swap:
sudo swapoff -a
- 使用
fdisk、parted或lvextend(如果使用LVM)调整分区大小。例如,扩展分区大小:
sudo lvextend -L 4G /dev/centos/swap
- 重新格式化Swap:
sudo mkswap /dev/centos/swap
- 重新启用Swap:
sudo swapon /dev/centos/swap
- 确认更改:
free -h
- 使用LVM(逻辑卷管理)扩容Swap:
- 查看当前的LVM卷组:
sudo vgs
- 扩展物理卷(PV):
sudo lvextend -L +2G /dev/mapper/vg_name-lv_swap
- 扩展Swap逻辑卷:
sudo mkswap /dev/mapper/vg_name-lv_swap
- 重新启用Swap:
sudo swapon /dev/mapper/vg_name-lv_swap
- 确认新的Swap空间是否已启用:
free -h
- 使用磁盘分区扩容Swap:
- 查看磁盘分区情况:
sudo fdisk -l
- 创建新的分区:
sudo fdisk /dev/sdb
按照提示创建一个新的分区(例如 /dev/sdb2),并设置类型为Linux swap。
- 格式化新分区为Swap:
sudo mkswap /dev/sdb2
- 启用新的Swap分区:
sudo swapon /dev/sdb2
- 验证新的Swap空间是否已启用:
sudo swapon --show free -h
- 使新的Swap设置在重启后仍然有效:
sudo nano /etc/fstab
在文件末尾添加以下行:
/dev/sdb2 none swap sw 0 0
保存并退出编辑器。
优化Swap使用
-
调整Swappiness参数:
-
临时调整Swappiness参数:
sudo sysctl vm.swappiness=10
- 永久调整Swappiness参数,需要将设置写入
/etc/sysctl.conf文件:
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
- 清理缓存和页面缓存:
sudo echo 3 | sudo tee /proc/sys/vm/drop_caches
- 验证内存是否已释放:
free -h
监控和调整
使用工具如 vmstat、iostat、free 和 top 来监控系统的内存和Swap使用情况。根据监控结果调整Swap设置和 swappiness 值,以优化系统性能。
请注意,在进行任何重大更改之前,建议先在测试环境中验证其效果。