node_modules 文件过多导致 mac mds 进程占用高CPU

1,532 阅读2分钟

问题分析:mds 进程占用高 CPU

现象

  • CPU 负载高,有个 mds 进程占用较高 CPU(或者是 mds_stores 进程)
  • 风扇狂转

img_v3_026q_2b2ae4df-8a9b-45b5-ba70-2e9b0796920g

分析

mds, mds_stores 这 2 个进程,是 Mac 自带的搜索功能(Spotlight)的后台进程,

该进程会在后台索引本机的所有文件,而 node_modules 里文件数量非常多,就导致了这个进程的工作量一直很高,特别是当你重新安装依赖、下载新项目的依赖后。

如何解决

临时方案

通过下面的指令,可以关闭索引,执行完后大概 3 ~ 5 分钟,这个进程就会逐渐关掉,电脑风扇也不狂转了。

sudo mdutil -a -i off

但是电脑重启后,Spotlight 索引又会自动开始,所以为了根本解决这个问题,还需要后面的长期方案。

长期方案

“聚焦”设置

  • 取消索引:平常用不到的文件类型

image-20240105下午65834349

  • 取消索引:包含 node_modules 文件夹

    尽量把项目代码都放在一个统一的文件夹下,如 code-group 文件夹

image-20240105下午70829236 image-20240105下午70810835

新增 fix-spotlight 指令

  1. 在 .zshrc 文件中,增加一个指令,用于避免 spotlight 检索 node_modules
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 就不会索引这个文件夹。

image-20240105下午74941281

后续,你只需要每隔一段时间(如每月)执行一下 fix-spotlight 即可。

换个性能好的 mac

如果你不想折腾,换个 m1 起步的 mac,也能解决部分问题 :)

参考资料

  1. github.com/yarnpkg/yar…
  2. lkxed.github.io/posts/mac-o…
  3. www.jianshu.com/p/d76dbc097…
  4. blog.csdn.net/xukai871105…
  5. www.cnblogs.com/xuchunlin/p…