mds 和 mdworker 占用 CPU 过高怎么办
mds、mds_stores 和 mdworker 都属于 Spotlight 索引系统。macOS 更新、数据迁移、恢复或大量文件变化后,它们短时间占用 CPU 很正常。mdutil -s 只能确认索引是否开启,不能显示重建进度,也没有固定的完成时间。
这些进程分别做什么
mds 负责协调索引,mds_stores 管理索引数据库,mdworker 扫描文件并提取可搜索的内容和元数据。索引是最新状态时,它们大多空闲,大量文件发生变化后,它们会重新工作。
为什么占用会突然升高
- macOS 更新或数据迁移后,磁盘上大量内容变了
- 恢复、移动或复制大量文件后
- 接入尚未索引的外置盘或网络卷后
- 下载、构建或同步让一个目录持续快速变化时
检查索引是否启用:
mdutil -s /
「Indexing enabled」是状态,不是进度。把持续的 mdworker CPU 与「活动监视器」中的磁盘读写、近期文件变化放在一起看。工作仍在推进时,让 Mac 接通电源并等待完成。
大型源码目录、邮件数据库、外置卷、慢速存储,以及反复同步都会延长时间。
长时间不结束怎么办
持续改写文件的应用和可疑外置卷可以逐个隔离,这样更容易看出是否有某个目录或磁盘一直制造新变化。
在「系统设置 > Spotlight > 搜索隐私」中排除目录,可以减少索引工作,代价是该目录不再出现在搜索结果中。这个取舍更适合明确不需要搜索的构建产物、虚拟磁盘或归档,整个个人目录和启动磁盘的影响就大得多。
如果搜索结果已经缺失,或索引能确认卡住,可以按 Apple 的 Spotlight 重建说明操作:把受影响磁盘或文件夹加入「搜索隐私」,短暂等待,再移除。不同 macOS 版本可能显示「搜索隐私」或「Spotlight 隐私」。移除后,Spotlight 会重新索引。
重建会把昂贵工作再做一遍,只适合修复确认存在的索引问题,不是看到 CPU 升高后的第一步。
Spotlight 索引怎样工作
Spotlight 会在每个卷隐藏的 .Spotlight-V100 中维护倒排索引,也就是从词语和元数据映射回文件。
文件变化后,FSEvents 通知 mds,mds 把文件交给 mdworker,mdworker 加载对应的 .mdimporter 插件,提取文本和元数据。普通编辑只处理少量变化,完整重建则要重新导入所有符合条件的文件。
「活动监视器」或 Mole 的「状态」页可以确认 CPU 与磁盘占用来自 Spotlight。接下来要判断它是在处理一批有限变化,还是某个目录一直被改写。查看近期活动并逐项隔离,比强制结束工作进程更有效。
索引工作有进展时,等待通常就够了,长期不退,才需要隔离持续变化的目录或磁盘。排除目录会失去搜索结果,重建也会重复昂贵工作,因此两者都适合有明确证据的情况,结束 mdworker 本身并不能清理索引问题。