« 「WindowsコマンドプロンプトにUnicode表示」の訂正 | トップページ | 円安と株高 »

2013年4月12日 (金)

意外な方法でSearchFilterHost.exeの暴走が止まる

2014/5/5加筆: 本件に関連する新たな発見を記事にした。

最近、特に思い当たる原因が無いのにCPU負荷の高い状態が暫く続く場合があることに気付いた。普段使っているWindows Vista機である。どうやらSearchFilterHost.exeが2つあるCPUコアの片方を独占してしまうようだ。ただし、私の場合30分~1時間くらい負荷の高い状態が続いた後、自然に止まる。

CPUファンがうるさい・部屋が暑くなる・電気を無駄使いする、など、良くないことばかりなので対策を検討した。Windows Searchを止めずにCPU負荷が高くならないような方法を目指したら、意外な結末にたどり着いた。

なお今回の記事は私の環境(Vista SP2 + C2D E8500)の結果であり、異なる環境では現象が異なったり、対策の効果が全く無かったりする場合があるかもしれない。

/*******  *******/

タスクマネージャはUACに注意が必要

CPU負荷が不自然に高い場合、タスクマネージャを使って原因を調べるのが一般的だ。

Task_all

SearchFilterHost.exe、SearchIndexer.exe、およびSearchProtocolHost.exeがWindows Searchの検索インデックスを作成しているプロセスである(SearchProtocolHost.exeが2つ立ち上がる場合もある)。上の図はSearchFilterHost.exeがCPUを独占していない状態なので、負荷の数値は低い。

ただしディフォルトのWindows VistaではUACが効いているので、Ctrl+Shift+Escでタスクマネージャを起動しただけではこれらSYSTEMアカウントで実行されているプロセスは見えない。

Task_normal

ボタンをクリックしてUACダイアログで許可してやる必要がある。

なお検索インデックス作成プロセスはSearchIndexer.exeが親玉で、他の2つは動的に生成される子プロセスだ。そのため作成処理がアイドル状態だとSearchIndexer.exeしか存在しないのが正常である。また通常3プロセスともCPU負荷は非常に低い。ただし操作せずに放置しておくと全体で50%程度の負荷になる。このことについては後ほどもう少し詳しく触れる。

 

標準的な処方はWindows Searchサービスを止める

検索インデックス作成処理はWindows Searchサービスが起動しているので、このサービスを止めてしまえばSearchFilterHost.exeがCPUを独占する現象は確実に防止できる。

Mmc

サービスを止めるだけでなく「スタートアップの種類」を「無効」にする必要がある。「自動」のままでは再起動で確実に再開するし、「手動」でもアプリケーションの要求により開始される場合があり得る。

ただし当然この処方ではインデックスを使った検索ができなくなるので、面白くない。

 

.xml除外したら?と言うアドバイス

米国msdnフォーラムでこの話題に関するスレッドが見つかった。
最初の投稿は「iTunesのライブラリをいじっていると、SearchFilterHost.exeのせいで重くてしょうがないからWindows Searchを止めてるけど、他にナントカなる方法は無いの?」というもの。

色々と興味深い書き込み満載だが、最初のほうにMicrosoftの人間がこんな書き込みをしているのが目を引いた。

Eric Wolz – MSFT  Sunday, March 25, 2007 1:29 AM

Try and disabling the .XML file extension from being indexed in the Indexing Options control panel.
インデックスオプションのコントロールパネルで、.XMLファイル拡張子をインデックス対象から除外してみて。

XMLファイルをインデックス対象外にする対策を試すと、確かに効果がある。しかし私はiTunesを全く使っていない。フォーラムのスレッドを辿ると、最初の投稿に対する答えが出ていた。

Dave Wood [MSFT]  Friday, September 07, 2007 9:12 PM

One thing that may be of general interest is that the issue related to iTunes and XML files should be resolved by downloading the latest version of iTunes. In the latest version the XML library file is no longer marked to have its content indexed so you should not see any perf isssues between Windows Search and iTunes any more. (以下略)

皆が気になっていることだと思うけど、iTunesとXLMファイルに関わる問題は最新のiTunesをダウンロードすれば解決するはずだ。最新のXMLライブラリ・ファイルは、その内容がインデックス対象であるというマークが付けられないようになった。だからiTunesとWindows Searchの、パフォーマンスに関する問題はもう発生しないはずだ。

5ヶ月待たして、iTunes側で対策したからお仕舞い、と言うこと。多分Microsoftは何も対策していないから、今でもXMLファイルの内容次第でCPU負荷が高くなる問題が残っている可能性が高い。実際私の環境で、CPU使用率が高くなっている状態でSearchFilterHost.exeのダンプを採って調べると、xmlfilter.dllとmsxml3.dllを読み込んで実行していることが確認できた。

 

XMLファイルをインデックス対象外にする手順

コントロールパネルで「システムとメンテナンス」 -> 「インデックスのオプション」を選ぶ。

Cpanel_system

「インデックスのオプション」ウインドウが開く。下はインデックス処理がアイドル状態の場合。

Indexop_complete

インデックス作成処理中の場合、ウインドウ上部の表示が異なる。

Indexop_busy

キーボードやマウスに触れずに放置(3分くらい)すると、ウインドウ上部の表示が変わり、虫眼鏡のアニメーションが始まる。(特に確認する必要は無い – 参考情報)

Indexop_running

「詳細設定」ボタンをクリックし、「ファイルの種類」タブで「xmlフィルタ」のチェックを外す。

Indexop_adv2

「OK」ボタンをクリックすると、インデックスを再構築するかどうか訊いて来る。

Index_rebuild

ここで「キャンセル」を選んでも、「ファイルの種類」の変更は保持される(キャンセルされない)。検証したわけではないが、差分を更新(XMLファイルのインデックスを削除)してくれるようである。

「OK」を選んで再構築を指示すると怪しい挙動を示す場合がある(ウインドウ上部の表示がいきなり「インデックスの作成は完了しました。」になる)。この場合「コンピュータの管理」ウインドウでWindows Searchサービスを再起動すると解消する(再構築が進む)ようだ。

 

正常な場合のインデックス作成処理の挙動について

コチラのブログ記事の「傾向」に書かれているように、正常な検索インデックス作成処理のリソース利用に関する挙動はかなり控えめである。

リンクしたブログ記事はWindows 7に関するものだが、Vistaでもほとんど同じだと思う。ただし「処理が止まる」と言う点については少し違う。かなり遅くなるのは事実だが、通常の使用の邪魔にならない程度にゆっくりインデックス作成が続いている。もしかするとWindowsのバージョンによる差なのかもしれない。

 

今回のまとめ

Windows Search用インデックス作成処理は、対象ファイルの内容などにより異常な動作に陥る場合がある。特にXMLファイルが問題を起こす場合が多いようだ。

問題を起こしているファイルが特定できれば、そのファイルだけインデックス作成対象外にすることも可能だ。しかしそのファイルが更新される場合、インデックス作成対象外の属性が保持されるかどうか疑問である。そのため今回はファイル拡張子でXMLファイルを一律にインデックス作成対象外とした。

|

« 「WindowsコマンドプロンプトにUnicode表示」の訂正 | トップページ | 円安と株高 »

パソコン・インターネット」カテゴリの記事

IT」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 意外な方法でSearchFilterHost.exeの暴走が止まる:

« 「WindowsコマンドプロンプトにUnicode表示」の訂正 | トップページ | 円安と株高 »