0%

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

本文掘金地址:https://juejin.cn/spost/7320456973899431936

问题分析

现象

  • CPU 负载高,有个 mds 进程占用较高 CPU(或者是 mds_stores 进程)
  • 风扇狂转
img_v3_026q_2b2ae4df-8a9b-45b5-ba70-2e9b0796920g

分析

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

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

如何解决

临时方案

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

1
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
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. 使新指令生效
1
source ~/.zshrc
  1. 在根目录执行指令
1
fix-spotlight

执行结果:

该指令会往所有 node_modules 文件夹里,增加一个 .metadata_never_index 文件,Spotlight 就不会索引这个文件夹。

image-20240105下午74941281

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

换个性能好的 mac

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

参考资料

  1. https://github.com/yarnpkg/yarn/issues/6453
  2. https://lkxed.github.io/posts/mac-os-spotlight/
  3. https://www.jianshu.com/p/d76dbc097521
  4. https://blog.csdn.net/xukai871105/article/details/35834703
  5. https://www.cnblogs.com/xuchunlin/p/5750221.html