🎉️配置交换内存
1. 创建 create_4g_swap.sh
#!/bin/bash
# 一键创建 4GB Swap 交换内存(CentOS 7 专用)
# 检查是否为 root 用户
if [ "$(id -u)" -ne 0 ]; then
echo "错误:请使用 root 权限执行(sudo -i 切换)"
exit 1
fi
# 定义 Swap 大小和路径(已改为 4GB)
SWAP_SIZE="4G"
SWAP_FILE="/swapfile"
# 检查是否已存在 Swap 文件
if [ -f "$SWAP_FILE" ]; then
echo "错误:Swap 文件 $SWAP_FILE 已存在,请先删除(执行 swapoff /swapfile && rm -rf /swapfile)"
exit 1
fi
# 检查磁盘空间(已改为校验 4GB 剩余空间)
AVAIL_SPACE=$(df -P / | awk 'NR==2 {print $4}') # 根分区剩余空间(KB)
REQUIRED_SPACE=$((4 * 1024 * 1024)) # 4GB = 4194304 KB
if [ "$AVAIL_SPACE" -lt "$REQUIRED_SPACE" ]; then
echo "错误:根分区剩余空间不足 4GB,当前剩余 $(echo "scale=2; $AVAIL_SPACE/1024/1024" | bc)GB,无法创建 Swap"
exit 1
fi
# 创建 4GB Swap 文件(两种方式兼容)
echo "正在创建 $SWAP_SIZE Swap 文件..."
fallocate -l $SWAP_SIZE $SWAP_FILE || {
echo "fallocate 命令失败,改用 dd 命令创建(约需几分钟,请耐心等待)..."
dd if=/dev/zero of=$SWAP_FILE bs=1G count=4 # 直接指定 4GB 容量
}
# 设置安全权限(仅 root 可读写)
chmod 600 $SWAP_FILE
# 格式化 Swap 文件
mkswap $SWAP_FILE
# 立即启用 Swap
swapon $SWAP_FILE
# 配置开机自动挂载(永久生效)
echo "$SWAP_FILE swap swap defaults 0 0" >> /etc/fstab
mount -a || {
echo "fstab 配置验证警告,请检查 /etc/fstab 最后一行是否正确"
exit 1
}
# 优化 Swap 使用策略(保持推荐值 50,让系统更倾向使用 Swap(适合内存密集型非核心应用,如编译、大数据处理))
sysctl vm.swappiness=50
echo "vm.swappiness=50" >> /etc/sysctl.conf
sysctl -p
# 验证创建结果
echo -e "\n✅ 4GB Swap 创建完成,当前系统内存状态:"
free -h
echo -e "\n当前激活的 Swap 信息:"
swapon --show
echo -e "\n提示:Swap 已永久生效,重启系统后无需重新配置"
echo "如需删除 Swap,执行命令:swapoff /swapfile && sed -i '/swapfile/d' /etc/fstab && rm -rf /swapfile"
```shell
#!/bin/bash
# 一键创建 4GB Swap 交换内存(CentOS 7 专用)
# 检查是否为 root 用户
if [ "$(id -u)" -ne 0 ]; then
echo "错误:请使用 root 权限执行(sudo -i 切换)"
exit 1
fi
# 定义 Swap 大小和路径(已改为 4GB)
SWAP_SIZE="4G"
SWAP_FILE="/swapfile"
# 检查是否已存在 Swap 文件
if [ -f "$SWAP_FILE" ]; then
echo "错误:Swap 文件 $SWAP_FILE 已存在,请先删除(执行 swapoff /swapfile && rm -rf /swapfile)"
exit 1
fi
# 检查磁盘空间(已改为校验 4GB 剩余空间)
AVAIL_SPACE=$(df -P / | awk 'NR==2 {print $4}') # 根分区剩余空间(KB)
REQUIRED_SPACE=$((4 * 1024 * 1024)) # 4GB = 4194304 KB
if [ "$AVAIL_SPACE" -lt "$REQUIRED_SPACE" ]; then
echo "错误:根分区剩余空间不足 4GB,当前剩余 $(echo "scale=2; $AVAIL_SPACE/1024/1024" | bc)GB,无法创建 Swap"
exit 1
fi
# 创建 4GB Swap 文件(两种方式兼容)
echo "正在创建 $SWAP_SIZE Swap 文件..."
fallocate -l $SWAP_SIZE $SWAP_FILE || {
echo "fallocate 命令失败,改用 dd 命令创建(约需几分钟,请耐心等待)..."
dd if=/dev/zero of=$SWAP_FILE bs=1G count=4 # 直接指定 4GB 容量
}
# 设置安全权限(仅 root 可读写)
chmod 600 $SWAP_FILE
# 格式化 Swap 文件
mkswap $SWAP_FILE
# 立即启用 Swap
swapon $SWAP_FILE
# 配置开机自动挂载(永久生效)
echo "$SWAP_FILE swap swap defaults 0 0" >> /etc/fstab
mount -a || {
echo "fstab 配置验证警告,请检查 /etc/fstab 最后一行是否正确"
exit 1
}
# 优化 Swap 使用策略(保持推荐值 50,让系统更倾向使用 Swap(适合内存密集型非核心应用,如编译、大数据处理))
sysctl vm.swappiness=50
echo "vm.swappiness=50" >> /etc/sysctl.conf
sysctl -p
# 验证创建结果
echo -e "\n✅ 4GB Swap 创建完成,当前系统内存状态:"
free -h
echo -e "\n当前激活的 Swap 信息:"
swapon --show
echo -e "\n提示:Swap 已永久生效,重启系统后无需重新配置"
echo "如需删除 Swap,执行命令:swapoff /swapfile && sed -i '/swapfile/d' /etc/fstab && rm -rf /swapfile"
2. 赋予执行权限
chmod +x create_4g_swap.sh
```shell
chmod +x create_4g_swap.sh
3. 以 root 权限执行
sudo ./create_4g_swap.sh
```shell
sudo ./create_4g_swap.sh
执行后若看到 ✅ 4GB Swap 创建完成,且
free -h中 Swap 一行显示约 4GB,则说明配置成功。
[root@iZbp16emwksrr7r40tt9lsZ local]# free -h
total used free shared buff/cache available
Mem: 1.7G 1.2G 80M 3.2M 440M 368M
Swap: 4.0G 264K 4.0G
```shell
[root@iZbp16emwksrr7r40tt9lsZ local]# free -h
total used free shared buff/cache available
Mem: 1.7G 1.2G 80M 3.2M 440M 368M
Swap: 4.0G 264K 4.0G
4. 删除命令,如需删除 Swap,执行命令:
swapoff /swapfile && sed -i '/swapfile/d' /etc/fstab && rm -rf /swapfile
```shell
swapoff /swapfile && sed -i '/swapfile/d' /etc/fstab && rm -rf /swapfile
全局调整 Swap 使用策略(影响所有应用)
通过修改 swappiness 参数,控制整个系统的 Swap 使用倾向,这是最常用的方式。
1. 临时调整(重启后失效,适合测试)
bash
运行
# 查看当前 swappiness 值(默认 30)
cat /proc/sys/vm/swappiness
# 示例 1:让系统尽量不用 Swap(适合核心应用,如 MySQL、Nginx)
sudo sysctl vm.swappiness=5
# 示例 2:让系统更倾向使用 Swap(适合内存密集型非核心应用,如编译、大数据处理)
sudo sysctl vm.swappiness=60
2. 永久调整(重启后生效)
编辑 /etc/sysctl.conf 文件,添加配置:
bash
运行
# 编辑配置文件
sudo vi /etc/sysctl.conf
# 末尾添加以下内容(根据需求选择值)
vm.swappiness=10 # 通用推荐(优先物理内存,内存不足时适度用 Swap)
# 生效配置
sudo sysctl -p
推荐场景配置:
- 核心服务(数据库、缓存、Web 服务器):
swappiness=0-10(避免 Swap 读写影响性能)。 - 非核心应用(编译、数据分析、后台脚本):
swappiness=40-60(允许更多使用 Swap,释放物理内存)。 - 低内存服务器(≤2GB 物理内存):
swappiness=30-50(平衡稳定性和性能).
0