Nov 202008
 

昨天自己办公PC因为半夜断电而以外关机了。然后白天过来干活时就发现机器慢得如同蜗牛爬。随手打开Taskmgr看了一下发现进程Searchindexer.exe占用了几乎100%的CPU。这进程是Windows Search服务的索引管理进程。正常情况下,Windows Search服务会在PC空闲时自动进行索引收录的工作,所以偶尔也会看见这个进程占用了100%的CPU。所以认为这可能是个临时问题,所以当时决定暂时把Windows Search服务暂停掉。打开Services.msc,发现Windows Search服务处于Starting状态,这才意识到可能是出问题了,一个服务长时间处于Starting状态说明肯定是卡在某些地方。于是找出Process monitor来看看Searchindexer.exe到底在干什么,结果发现这进程虽然占了100%的CPU,却是Hang在那里没干什么事。

进行到这里,基本上开始怀疑断电将硬盘上的索引文件给搞坏了。于是现在的思路是Rebuild Windows Search的Index。直奔Control Pannel – Indexing Options。结果发现在Windows Search服务启动不起来的情况下这里的所有选项都是失效的。

然后剩下的方法就比较暴力了,既然你不让我Reindex,那我只好上大刀砍了。首先将Windows Search服务设置为禁用,然后直接杀掉Searchindexer进程。然后找到如下两个文件夹,把里面的东西全部干掉:

C:\ProgramData\Microsoft\Search\Data\Applications\Windows

C:\ProgramData\Microsoft\Search\Data\Temp

然后把Windows Search服务恢复为Automatic。Reboot机器。

机器重起之后,Service应该就可以很快启动了,不过Searchindexer依旧可能会吃掉很多CPU,因为要完全重新创建索引,但这次持续时间应该不会很长。在运行一段时间后,应该就会退回后台偷偷跑了。至此修复工作完成。

题外话:

从搜索的结果来看,Searchindexer进程出问题的人不在少数,但不一定都像我这次一样是Index彻底烂掉,有时耐心等一下可能就好了(我可是在确认出问题前等待了好几个小时)。

索引并不是对所有人都有用,对于有些人硬盘上的东西经常变化,却不怎么需要去快速查找定位的,不停地收录只是浪费时间和资源。此时禁用Windows Search会感觉到性能有不小的提升。

Windows Search所谓的空闲时运行的机制,也并不是那么智能,所以用Vista系统的,有人经常会发现在干着活的时候硬盘开始莫名的转,此时很可能是系统在后面偷偷的索引,或者在偷偷的磁盘碎片整理。此时的用户体验可能因为硬盘读写导致用户感觉操作不怎么流畅。

对于磁盘空闲空间<10%的情况,索引和磁盘碎片整理应该可以禁用掉了,此时带来的性能影响可能会让人感觉很糟糕,是该整理垃圾或者买新硬盘了。

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>