Skip to content

Instantly share code, notes, and snippets.

@eczn
Created May 16, 2024 14:20
Show Gist options
  • Save eczn/9bfa9d71d338254f32df06f3537ed801 to your computer and use it in GitHub Desktop.
Save eczn/9bfa9d71d338254f32df06f3537ed801 to your computer and use it in GitHub Desktop.
mac 禁用 swap 交换

参考自 https://github.com/digoal/blog/blob/master/202212/20221207_01.md 这里备份记录一下


第零步:关闭 SIP

SIP 会导致你即使是 root 用户也会出 operation not permitted 的情况出现,尤其是操作一些系统底层的时候(比如 nvram、系统目录/服务等)

关闭方式(只测了我的 m1 mac,需要进入恢复模式):

  1. 关机
  2. 一直按着关机键,直到进入恢复模式
  3. 打开恢复模式的控制台
  4. 输入 csrutil dsiable 后就禁用 SIP 了
  5. 重启进入 mac 系统

第一步:查看 vm.compressor_mode

先使用 sysctl -a vm.compressor_mode 来检查现在的内存模式,默认的数字应该是 4。

1 代表不压缩内存且不启用 swap。
2 代表压缩内存但不启用 swap。
3 代表不压缩内存但启动 swap。
4 代表着压缩内存并启用 swap。

第二步:设置 vm.compressor_mode

然后建议设置为 2: sudo nvram boot-args="vm_compressor=2"

不过,有可能你之前已经有设置过 boot-args 了,这样可能会把你原来的 boot-args 覆盖掉,建议先 nvram -p 看看 boot-args 是不是有别的, 比如你可能有设置过 serverperfmode=1

那么这个时候就填 sudo nvram boot-args="vm_compressor=2 serverperfmode=1" 这样把之前的配置加上去(类似 $PATH 那样的处理)

当然也可以一行搞定:

# 我没试过这个核心是 $(nvram boot-args 2>/dev/null | cut -f 2-) 这个
nvram boot-args="vm_compressor=2 serverperfmode=1 $(nvram boot-args 2>/dev/null | cut -f 2-)"

第三步:禁用 dynamic_pager

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

第四步:重启

重启, 检查swap是否已关闭:

$ sysctl -a vm.compressor_mode

预期返回 2

最后记得回到恢复模式重新启用 SIP

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment