一直用通行密钥登录。可是最近突然用不了了,会界面一直卡住,只能通过密码的方式来登录。
我尝试了常规的办法,比如清空Safari的数据。没有作用,然后我又尝试打开密码应用,删除掉一些过期的密码。还是没有作用。
我注意到spindump在这期间CPU占用会达到100%,我问了AI,AI说这个是Spotlight的工作进程,只要不一致100%,能自动恢复正常就没问题。于是我就放弃了这个线索。
这么将就用了两天,今天在浏览X的时候,看到有人提到自己为了追一个bug,把系统日志喂给AI,让AI逐一排查。我一想,这是个好主意啊。于是我又开始研究这个问题。
正式研究
我先打开控制台应用,然后点击开始。我一开始过滤的是Safari的日志,但是把错误和故障的日志发给AI后,AI的答案没啥用。
于是我又把日志范围扩大到我操作期间的所有系统日志,结果发现了一个这样的故障。
AuthenticationServicesAgent
Failed to acquire lock for -[ASCAgent cancelCurrentRequest]_block_invoke
但是AI对于这个问题也没啥好办法。
于是我取消了日志所有的过滤器。结果看到满屏的Spotlight的日志。于是我禁用了SpotLight的索引。然后再试,结果还卡。重启,不卡了。
结论
用户在登录时,会先调用密码应用查询用户名,然后通过密码或者通行密钥登录。在这个过程中,会卡顿几次:
- 查询用户名时卡一次。
- 选择用户名时卡一次。
- 选择通行密钥登录时一直卡。
也就是说,1和2时遇到了缓慢的问题,而3遇到了没有查询结果的问题。
而每次遇到这种情况,macOS的处理方式,就是使用Spotlight重新对于相关内容(密码应用的数据)进行索引。这进一步造成了卡顿。
建议的解决步骤
禁用Spotlight的方法
将系统和用户自身文件夹所在的磁盘分区,加入到Spotlight的搜索隐私。恢复则移除即可。