问题分析
现象
- CPU 负载高,有个 mds 进程占用较高 CPU(或者是 mds_stores 进程)
- 风扇狂转
分析
mds, mds_stores 这 2 个进程,是 Mac 自带的搜索功能(Spotlight)的后台进程,
该进程会在后台索引本机的所有文件,而 node_modules 里文件数量非常多,就导致了这个进程的工作量一直很高,特别是当你重新安装依赖、下载新项目的依赖后。
如何解决
临时方案
通过下面的指令,可以关闭索引,执行完后大概 3 ~ 5 分钟,这个进程就会逐渐关掉,电脑风扇也不狂转了。
1 | sudo mdutil -a -i off |
但是电脑重启后,Spotlight 索引又会自动开始,所以为了根本解决这个问题,还需要后面的长期方案。
长期方案
“聚焦”设置
- 取消索引:平常用不到的文件类型
取消索引:包含 node_modules 文件夹
尽量把项目代码都放在一个统一的文件夹下,如 code-group 文件夹
新增 fix-spotlight 指令
- 在 .zshrc 文件中,增加一个指令,用于避免 spotlight 检索 node_modules
1 | echo "alias fix-spotlight=\"find . -type d -path './.*' -prune -o -path './Pictures*' -prune -o -path './Library*' -prune -o -path '*node_modules/*' -prune -o -type d -name 'node_modules' -exec touch '{}/.metadata_never_index' \; -print\"" >> ~/.zshrc |
如果你的 shell 不是 zsh,那就上面的指令最后声明的写入目标文件,改成你用的 shell rc 文件,如 ~/.bash_profile
- 使新指令生效
1 | source ~/.zshrc |
- 在根目录执行指令
1 | fix-spotlight |
执行结果:
该指令会往所有 node_modules 文件夹里,增加一个 .metadata_never_index
文件,Spotlight 就不会索引这个文件夹。
后续,你只需要每隔一段时间(如每月)执行一下 fix-spotlight
即可。
换个性能好的 mac
如果你不想折腾,换个 m1 起步的 mac,也能解决部分问题 :)