写在前面

什么是Swap

为什么要关闭Swap?

使用Swap会导致硬盘的大量读写并降低其寿命,且Swap的速度远小于RAM,会导致日常使用中莫名其妙的卡顿,我遇到的就有卡死的启动台/卡死的台前调度/出不来的截图

但调度算法并没有我们想象中的聪明,在某些实际上不需要使用到Swap的场景下OS会使用Swap,这里选择暴力关闭Swap☠️

大家可以根据自己的使用情况来考虑关闭Swap

教程基于MBA M1演示

一、有关SIP

进入恢复模式

  1. 确保 Mac 已关机,按住电源按钮直到出现正在载入启动选项后松开

  2. 点击选项——继续

  3. 选择一个管理员并输入密码继续

  4. shift+command+T/在左上角实用工具中打开终端

关闭SIP

1
csrutil disable

根据终端提示输入y管理员密码,等待SIP的关闭后,运行

1
reboot

重启到正常系统

二、关闭Swap

启动台——其他内找到终端/command+空格搜索终端并打开

检查当前vm.compressor_mode

运行

1
sysctl -a vm.compressor_mode

查看返回值

1:不压缩内存且不启用

2:压缩内存但不启用

3:不压缩内存但启用

4:压缩内存并启用

默认情况应当返回4我们希望将其修改为模式2

修改vm.compressor_mode

  1. 此前未进行过类似操作

    直接运行:

    1
    
    sudo nvram boot-args="vm_compressor=2"
    
  2. 此前可能修改过boot-args

    先运行:

    1
    
    nvram -p
    

    查看boot-args

    后将已有的boot-args添加至命令中并运行,例:

    1
    
    sudo nvram boot-args="vm_compressor=2 serverperfmode=1"
    

删除SwapFile

运行

1
2
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*

重启并检查vm.compressor_mode

运行

1
sudo reboot

重启后打开终端运行

1
sysctl -a vm.compressor_mode

预期返回值为2,即成功关闭Swap

三、重新打开部分SIP

根据前面所写的办法进入恢复模式并打开终端

运行

1
csrutil enable --without nvram

根据终端提示输入y管理员密码,等待SIP的开启后,运行

1
reboot

重启到正常系统 大功告成!

注意:

这里--without nvram参数只是开启了部分SIP,因为在我的测试环境下,开启全部的SIP会导致boot-args设置失效,大家可以自行去除参数测试

四、重新打开Swap

根据前面所写的方法关闭SIP,修改vm.compressor_mode4,即重新打开Swap

1
   sudo nvram boot-args="vm_compressor=4"

最后记得重新打开完整SIP

1
csrutil enable