由于 MacBook 激进的 SWAP 策略 和 unix 特有的内存管理模式,导致 MacBook 在轻量使用情况下仍然占用大量内存,且会对 SSD 进行 SWAP 过量擦写硬盘,在高强度使用时,SWAP 擦写更频繁,导致电脑 SSD 寿命大幅下降
为什么建议关闭?
听说M1有SSD磨损的问题。
我在了解之后,就把虚拟内存关掉了。但在我关闭后,打开电脑奇怪的发现虚拟内存还在使用,并且还是一直保持2GB左右,半个月不到就2TB了,我表示很慌。在第二天我打开电脑准备工作时,习惯性打开活动监视器(command + 空格),发现已使用的交换内存为0字节,我特别高兴。
但在我打开3个idea窗口时,分别运行了1个Springboot的项目和2个node项目时,习惯性查看活动监视器,发现又上升到了2GB,也就是说,关闭虚拟内存和启动虚拟内存是不一样的效果。
1.启动虚拟内存(默认):不管怎么样都会使用虚拟内存,除非你的内存特别大,目的是为了防止在突然打开一个超大的文件时,导致需要重新处理内存与虚拟内存。所以默认使用虚拟内存,尽量让出大部分物理内存。
2.关闭虚拟内存(需要手动):默认不使用虚拟内存,但经过我观察,似乎是超过预警阈值(内存GB-2GB的样子)就会开始使用虚拟内存,我猜测目的是为了系统的稳定性
也就是说,即使关闭了虚拟内存,也不会影响系统稳定性,因为超过阈值又会继续使用虚拟内存。但关闭后就可以在没必要的情况下使用虚拟内存。其实效果也不是很好,因为我打开电脑一定就是打开idea搞开发,所以每天都还是会使用大量虚拟内存。
如何关闭虚拟内存
为缓解 MacBook 激进的 SWAP 策略,在内存有余量的情况下,可以关闭虚拟内存,不对 SSD 进行硬盘的 SWAP ,以延长电脑使用寿命,具体操作如下:
- 关闭系统完整性保护机制
- 关闭虚拟内存
关闭系统完整性保护机制
首先关闭系统完整性保护需要进入recovery OS,Mac M1进入模式好像不太一样。就在电脑完全关机的情况下,一直按着电源键不放,提示你继续按着电源键就可以进入,然后直到提示你正在进入恢复模式就可以放手了。
选择用户输入密码后,左上角有一排的菜单,找到终端打开他,输入:
csrutil disable
我记得好像会提示什么权限转移吧,反正yes就可以了。
关闭虚拟内存
重启电脑后打开终端,输入:
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
然后就关闭了,使用这个指令可以查看虚拟内存使用情况:
sysctl vm.swapusage
重新开启系统完整性保护机制
到了这里你就关闭了虚拟内存,但注意,你之前关闭了系统完整性保护,我建议你重新开启,以免不必要的问题,重新进入recovery OS恢复模式,在终端输入:
csrutil enable
关闭虚拟内存不排除是否有风险,如果你每天都是负载使用MAC,关不关都无所谓的。如果你只是简单使用MAC,内存一大半没用就被使用了虚拟内存,你就可以关闭掉虚拟内存。