Loading... 转载自: - [阿晴博客](https://blog.861975.xyz/tools/swap.html); - [Linux VPS一键添加/删除Swap虚拟内存](https://www.moerats.com/archives/722/)。 因为在使用部分厂商的Linux VPS时,遇到了使用一键脚本设置了交换内存但是却不占用的情况,所以在网上查找了一下资料,找到了这些资料。 ### 开启交换内存 1. 创建交换文件: 首先创建一个交换文件。假设你想创建一个1GB的交换文件: ```bash sudo fallocate -l 1G /swapfile ``` 如果`fallocate`命令不可用,可以使用`dd`命令: ```bash sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 ``` 2. 设置交换文件权限: 为了安全,必须将交换文件的权限设置为只有root用户可以读取和写入: ```bash sudo chmod 600 /swapfile ``` 3. 将文件格式化为交换空间: 接下来,将文件格式化为交换空间: ```bash sudo mkswap /swapfile ``` 4. 启用交换文件: 启用交换文件使其生效: ```bash sudo swapon /swapfile ``` 5. 验证交换空间: 使用以下命令验证交换空间是否已经启用: ```bash sudo swapon --show ``` 你也可以使用`free -h`命令查看交换空间: ```bash free -h ``` 6. 持久化配置: 为了在系统重启后仍然保留交换空间,需要将交换文件添加到`/etc/fstab`文件中: ```bash echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab ``` 7. 调整交换使用策略(可选): 可以调整系统何时使用交换空间。交换空间使用策略由`vm.swappiness`参数控制,取值范围是`0`到`100`。较高的值表示系统更倾向于使用交换空间,较低的值表示系统更倾向于使用物理内存。 查看当前的`swappiness`值: ```bash cat /proc/sys/vm/swappiness ``` 临时调整`swappiness`值,例如调整为`10`: ```bash sudo sysctl vm.swappiness=10 ``` 要永久调整,可以编辑`/etc/sysctl.conf`文件,添加以下行: ```bash vm.swappiness=10 ``` 完成以上步骤后,你的Debian系统就会启用并使用交换空间了。 ### 关闭swap内存 1. 关闭交换空间: 首先,禁用当前活动的交换文件或交换分区: ```bash sudo swapoff /swapfile ``` 如果使用的是交换分区,命令可能是: ```bash sudo swapoff /dev/sdX ``` 其中`/dev/sdX`是你的交换分区的设备名。 2. 删除交换文件(如果使用的是交换文件): 如果你使用的是交换文件,可以删除它以释放空间: ```bash sudo rm /swapfile ``` 3. 移除持久化配置: 如果你在`/etc/fstab`中添加了交换文件或交换分区,需要将其移除以防止系统在重启后重新启用交换空间。 编辑`/etc/fstab`文件: ```bash sudo nano /etc/fstab ``` 找到类似于以下的行: ```bash /swapfile none swap sw 0 0 ``` 或: ```bash /dev/sdX none swap sw 0 0 ``` 将该行删除或注释掉(在行前添加`#`号)。 保存并退出编辑器。 4. 验证交换空间已禁用: 使用以下命令验证交换空间是否已禁用: ```bash sudo swapon --show ``` 应该没有任何输出,表示没有启用的交换空间。 你也可以使用`free -h`命令确认交换空间已禁用: ```bash free -hb ``` 交换区域应该显示为0。 完成这些步骤后,你的Debian系统将不会使用交换内存。 ### 如果交换内存没被使用,检查当前内存和交换使用情况 检查`swappiness`值: `swappiness`参数控制了系统使用交换空间的倾向,默认值通常为`60`。如果这个值设置得很低,系统可能在内存完全用完之前不会使用交换空间。 查看当前`swappiness`值: ```bash cat /proc/sys/vm/swappiness ``` 如果`swappiness`值较低,可以考虑临时调整为较高的值来强制系统更早使用交换空间,例如: ```bash sudo sysctl vm.swappiness=60 ``` 要永久调整,可以编辑`/etc/sysctl.conf`文件,添加以下行: ```bash vim /etc/sysctl.conf ``` ```bash vm.swappiness=60 ``` 使配置生效: ```bash sysctl -p ``` ### 一键添加/删除交换空间脚本 ```bash wget https://www.moerats.com/usr/shell/swap.sh && bash swap.sh ``` 备份一下脚本内容: ```bash #!/usr/bin/env bash #Blog:https://www.moerats.com/ Green="\033[32m" Font="\033[0m" Red="\033[31m" #root权限 root_need(){ if [[ $EUID -ne 0 ]]; then echo -e "${Red}Error:This script must be run as root!${Font}" exit 1 fi } #检测ovz ovz_no(){ if [[ -d "/proc/vz" ]]; then echo -e "${Red}Your VPS is based on OpenVZ,not supported!${Font}" exit 1 fi } add_swap(){ echo -e "${Green}请输入需要添加的swap,建议为内存的2倍!${Font}" read -p "请输入swap数值:" swapsize #检查是否存在swapfile grep -q "swapfile" /etc/fstab #如果不存在将为其创建swap if [ $? -ne 0 ]; then echo -e "${Green}swapfile未发现,正在为其创建swapfile${Font}" fallocate -l ${swapsize}M /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile echo '/swapfile none swap defaults 0 0' >> /etc/fstab echo -e "${Green}swap创建成功,并查看信息:${Font}" cat /proc/swaps cat /proc/meminfo | grep Swap else echo -e "${Red}swapfile已存在,swap设置失败,请先运行脚本删除swap后重新设置!${Font}" fi } del_swap(){ #检查是否存在swapfile grep -q "swapfile" /etc/fstab #如果存在就将其移除 if [ $? -eq 0 ]; then echo -e "${Green}swapfile已发现,正在将其移除...${Font}" sed -i '/swapfile/d' /etc/fstab echo "3" > /proc/sys/vm/drop_caches swapoff -a rm -f /swapfile echo -e "${Green}swap已删除!${Font}" else echo -e "${Red}swapfile未发现,swap删除失败!${Font}" fi } #开始菜单 main(){ root_need ovz_no clear echo -e "———————————————————————————————————————" echo -e "${Green}Linux VPS一键添加/删除swap脚本${Font}" echo -e "${Green}1、添加swap${Font}" echo -e "${Green}2、删除swap${Font}" echo -e "———————————————————————————————————————" read -p "请输入数字 [1-2]:" num case "$num" in 1) add_swap ;; 2) del_swap ;; *) clear echo -e "${Green}请输入正确数字 [1-2]${Font}" sleep 2s main ;; esac } main ``` 最后修改:2026 年 03 月 09 日 © 转载自他站 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏。