对于过于小规格的云主机(1C 0.5G)可能因为内存太小无法成功运行yum update,需要开启swap
新买的主机可能不允许root登录,需要开启
允许用户登录
进入root用户
sudo -i
为root设置密码:
sudo passwd root
根据提示输入密码
修改配置文件:
在 root 用户下去修改这个文件。
vi /etc/ssh/sshd_config
把 PermitRootLogin
注释去掉并且后面改成 yes
。
重启配置文件:
/etc/init.d/ssh restart
开启swap
1.创建一个swap文件。(count代表的是大小,我这里是2G。)
cd /var
sudo mkdir swap
sudo dd if=/dev/zero of=swapfile bs=1024 count=2000000
2.把文件转换为swap文件,在 var目录执行:
sudo mkswap swapfile
3.激活swap文件
这里可以直接用命令挂载上一个swap分区,但是重启后要重新挂载:
挂载: sudo swapon /var/swapfile
如果不需要了,可以也可以卸载:
卸载:sudo swapoff /var/swapfile
4、如果需要开机启动后自动挂载的话,可以把它添加到/etc/fstab文件中。
开机自动挂载SWAP分区,编辑 /etc/fstab,末行添加:
/var/swapfile swap swap defaults 0 0
这样就已经完成增加swap分区了。可以用free -m来参看结果。
5、对于大多数 Linux 系统,swappiness 值为60是可以的,但是对于生产服务器,应该设置较低的值。
例如,要将 swappiness 值设置为10,输入:
sudo sysctl vm.swappiness=10
为了使这个参数在重新引导过程中持久化,在 /etc/sysctl.conf
文件中添加以下行:
vm.swappiness=10
一键开启swap脚本:
#!/bin/bash
一键创建Swap交换空间脚本(适用于Ubuntu 24.04)
版本:v1.2
作者:CloudHelper
退出代码约定:
0 - 成功
1 - 需要root权限
2 - 不支持的发行版
3 - 操作已取消
4 - 文件创建失败
初始化配置
SWAP_FILE="/swapfile" DEFAULT_SIZE="2G" # 默认交换空间大小(2GB) SWAPPINESS=10 # 推荐值(1-100) PAGE_SIZE=$(getconf PAGESIZE)
安全验证
if [[ $EUID -ne 0 ]]; then echo "错误:本脚本需要root权限执行,请使用 sudo 或切换root用户" >&2 exit 1 fi
检测发行版
if ! grep -q 'Ubuntu 24.04' /etc/os-release; then echo "错误:本脚本仅适用于 Ubuntu 24.04 系统" >&2 exit 2 fi
显示当前内存信息
echo "当前系统内存状态:" free -h echo -e "\n内存页大小:${PAGE_SIZE}B"
检查现有交换空间
if swapon --show | grep -q "$SWAP_FILE"; then echo -e "\n⚠️ 检测到已存在的交换文件:$SWAP_FILE" read -p "是否删除并重建?(y/N) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "操作已取消" exit 3 fi swapoff "$SWAP_FILE" || true rm -f "$SWAP_FILE" fi
获取交换空间大小
read -p "请输入交换空间大小(默认:$DEFAULT_SIZE):" swap_size swap_size=${swap_size:-$DEFAULT_SIZE}
创建交换文件
echo -e "\n正在创建交换文件(大小:$swap_size)..." if ! fallocate -l "$swap_size" "$SWAP_FILE"; then echo "fallocate 失败,尝试使用dd方式创建..." dd if=/dev/zero of="$SWAP_FILE" bs=1M count=$(( $(echo $swap_size | sed 's/[^0-9]*//g') * 1024 )) status=progress fi
if [[ ! -f "$SWAP_FILE" ]]; then echo "错误:交换文件创建失败" >&2 exit 4 fi
设置安全权限
chmod 600 "$SWAP_FILE" chattr +c "$SWAP_FILE" # 启用压缩属性(适用于阿里云ESSD云盘)
格式化并启用交换空间
mkswap "$SWAP_FILE" swapon "$SWAP_FILE"
持久化配置
if ! grep -q "^$SWAP_FILE" /etc/fstab; then echo "$SWAP_FILE none swap sw 0 0" >> /etc/fstab fi
优化内核参数
sysctl vm.swappiness=$SWAPPINESS echo "vm.swappiness=$SWAPPINESS" >> /etc/sysctl.conf
sysctl vm.vfs_cache_pressure=50 echo "vm.vfs_cache_pressure=50" >> /etc/sysctl.conf
验证结果
echo -e "\n✅ 操作完成!最终内存状态:" swapon --show free -h
显示建议信息
echo -e "\n提示:" echo "1. 建议定期检查交换空间使用情况:" echo " sudo swapon --show" echo " free -h" echo "2. 如需调整优先级,可在fstab中添加pri=值(0-32767)" echo "3. 当前swappiness设置为$SWAPPINESS(值越低越倾向使用物理内存)"
exit 0
全部评论