背景
禁用 MacOS 的 Swap 分区, 目的是提高速度.
原文
众所周知,Swap 是将磁盘虚拟为内存来用的,所以速度肯定比不上扎扎实实的内存的。这样一来,不管我操作啥,电脑都感觉卡卡的,就像我用了下我家 15 年前的那个戴尔本一样。而且以前早就有禁用 Swap 的想法了,这次就直接去实施了。
禁用 Swap
- 如果你的物理内存真的不够,禁用 Swap 可能会导致程序被内核 OOM(Out Of Memory) Kill 掉,甚至导致内核崩溃。请自行斟酌风险。
1.0 禁用 SIP
从 MacOS 10.11 开始,苹果就在 MacOS 里加上了 SIP(系统完整性保护 System Integrity Protection)这导致了要想修改系统文件就必须进入恢复模式去关闭 SIP,否则即使是 root 用户也只会返回 Operation not permitted。所以,必须要关闭 SIP。
- 点击重新启动 Mac, 然后按住键盘上左边的
Command(⌘)+ R
直到进入恢复模式.- 一定要使用标准键盘, 有些机械键盘、蓝牙键盘无法进入恢复模式. 深受其害. 后来找了个DELL电脑的原配普通键盘就可以了.
- 系统可能会提示您输入密码,例如固件密码,或这台 Mac 的管理员用户的密码。请输入要求的密码以继续。
- 在实用程序菜单中,选择“终端”。
- 输入
csrutil disable
并回车 - 在菜单中,点击重新启动来重启电脑。
重启后查询当前SIP状态:
$ csrutil status
System Integrity Protection status: disabled.
1.1 禁用 Swap
先使用 sysctl -a vm.compressor_mode
来检查现在的内存模式,默认的数字应该是 4。
- 1 代表不压缩内存且不启用 swap。
- 2 代表压缩内存但不启用 swap。
- 3 代表不压缩内存但启动 swap。
- 4 代表着压缩内存并启用 swap。
输入 sudo nvram boot-args="vm_compressor=2"
即可将内存管理模式更改为压缩内存但不启用 swap
检查nvram boot状态:
IT-C02YW2EFLVDL:~ digoal$ nvram -p|grep compress
boot-args vm_compressor=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
launchctl list|grep dynamic_pager
PS: macos这个参数有点类似linux的vm.swappiness和vm.overcommit_memory:
- The overcommit policy is set via the sysctl vm.overcommit_memory. The overcommit amount can be set via vm.overcommit_ratio (percentage) or vm.overcommit_kbytes (absolute value). The current overcommit limit and amount committed are viewable in /proc/meminfo as CommitLimit and Committed_AS respectively.
- Swappiness is a property for the Linux kernel that changes the balance between swapping out runtime memory, as opposed to dropping pages from the system page cache. Swappiness can be set to values between 0 and 100, inclusive.
使用一段时间之后, 也可以检查一下swap的真实使用情况是否为0
$ sysctl -a vm.swapusage
vm.swapusage: total = 0.00M used = 0.00M free = 0.00M (encrypted)
1.2 启用 SIP
由于安全原因,这里建议重新启用 SIP。如果想要启用的话,进入恢复模式, 直接在终端中输入 csrutil enable
即可。
PS: 使用之前这篇文档操作貌似不行, 依旧使用swap: 《MacOS 关闭和开启虚拟内存(swap)》
禁用其他系统服务
1.0 禁用 mds_stores
mds
是 Spotlight
的一部分。也就是你按 Command (⌘) + 空格
弹出来的那个东西。它为所有文件建立索引,以便在你要搜索文件的时候快速的找到你想要的东西。因为我的 Spotlight
已经完全被 Alfred
替代,所以可以禁用它以节省CPU和内存。
- 在终端中输入
sudo mdutil -a -i off
即可禁用索引。 - 若想恢复索引,需要在终端中输入
sudo mdutil -a -i on
。