treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

Windows8.1自動メンテナンスでCPU使用率100%

今日はWindows8.1の自動メンテナンスの話題です。自動メンテナンスって動作するとPCが重くなってしまってWebブラウザの動作もっさり(場合によっては応答なし)、エクスプローラ開くにも、どっこいしょ、てな具合に遅くなってしまいます。
この自動メンテナンスの正体についてご報告します。

ただし対処方法についてはさておき(棚上げとなり)ます。

ある日PCを起動したら重かった

最近気づいたのですが、PCを複数台使っているとPC-Bで操作が終わった後にPC-Aを使い始めるとやけに動作がもっさりして何を使うにも数秒待ちが発生してしまう、という症状がありました。
あれ?第二世代とはいえCore i7だしメモリも16GB積んでるThinkPad T420sですぞ。
よく見ると、画面右下…
f:id:treedown:20160913122156p:plain図1:アクションセンター:メンテナンス進行中

ああ、自動メンテナンスが動作しているんですか?
に、しても重くないもんでしょうか?タスクマネージャで確認してみました。
図2:CPU使用率100%

f:id:treedown:20160913122246p:plain

いわゆるCPUが天井に張り付いている状態、というやつです。100%の使用率で何をするにも処理が遅い状況です。
こりゃまた…。

CPUの使用をプロセスごとに見てみました。

f:id:treedown:20160913122320p:plain

MsMpEng.exe=アンチマルウェアのプロセスが重いようです。とはいえmsiexec.exeも動作していますしWmiPrvSE.exeもrundll32.exeも勢いよくCPUを使い切ってくれているようです。

とりあえず…

自動メンテナンスかどうかは確信が持てなかったので、モノは試しと自動メンテナンスを止めてみることにしました。
図4:自動メンテナンス停止

f:id:treedown:20160913122332p:plain

アクションセンターの中に「自動メンテナンス」があるので「メンテナンスの停止」をクリックして止めてみます。
画面が変わりました。
図5-1:停止直後

f:id:treedown:20160913122341p:plain
表示が変わりました。
図5-2:停止後しばらくして

f:id:treedown:20160913122352p:plain

自動メンテナンスを停止した日時が記録されてどうやら再スケジュールされたようです。

これを実行した後にプロセスを見てもCPUやディスクアクセスはすぐに低負荷状態になりませんでした。と、いうのもこの自動メンテナンスにはWindows Updateの自動更新が含まれていたため、いったん動作してしまったWindows Updateの自動更新が完了するまでは実行しきってしまう、という動きをするためです。実際途中で停止したらおかしくなること請け合いだからこれはこれでいい動作なんですが、ちょっとわかりにくかったです。Windows Updateの更新履歴画面を見たらちゃんと実行されているのが確認できました。

自動メンテナンスタスクの正体

タスクスケジューラにある「Regular Maintenance」というタスク名が自動メンテナンスタスクです。
図6:タスクスケジューラ画面

f:id:treedown:20160913122416p:plain

場所は「\Microsoft\Windows\TaskScheduler」フォルダの中にあります。
同じタスクかどうかを確認するために、自動メンテナンス設定画面から時刻を変更してみます。
図7-1:時刻変更

f:id:treedown:20160913122426p:plain

もともと午前3:00のスケジュールだったのが、自動メンテナンス設定画面で18:00に変更したところ、タスクスケジューラのトリガーに指定された時刻も「18:00」に変わっていたのでこの二つは連動している、ということになります。
図:7-2:タスクスケジューラのタスクに反映された

f:id:treedown:20160913122440p:plain

自動メンテナンス設定画面の説明書きにありますが、自動メンテナンスは

  • ソフトウェア更新=Windows Updateの自動更新
  • セキュリティスキャン=Windows Defender
  • システム診断=デフラグとか?コンピュータの情報収集とか

を自動実行している、ということのようです。
となると、これを止めてしまえば上記のタスクは自動実行されないので手動でわざわざ実行してあげないといけない、ということになります。

実行した対処は「時間をずらす」

このWindows8.1のPCでは、とりあえずWindows Updateの自動更新は勝手にバックグラウンドで実行してもらわないと困る環境なので、無効化する、というのはちょっと採用できない状況です。

ではせめて時間をずらす、ということで、起動しているけど利用する率が少ない時間に自動メンテナンスが実行されるようにしました。

先ほどのタスクスケジューラの画面でプロパティを選択し、トリガー画面から時間を変更しました。
図:時刻変更画面例

f:id:treedown:20160913122518p:plain

この画面で自分の行動パターンに合わせて適切な時間に変更します。
図:条件プロパティ

f:id:treedown:20160913122531p:plain

気になったので、次の間アイドル状態の場合のみタスクを開始する、のオプションを0分間から1分間に変更しました。1分間アイドル状態になったら動作するってことのはず。
で、バッテリー稼働状態のときにこんな重いタスクを実行されても(劣化した)バッテリがなくなる前に終了できるとは限らないので、AC電源を使用しているときのみタスクを実行するように変更しました。

これで月例のWindows Updateの自動更新も18:00から動作するようになる、という期待を込めていますが、結果がわかるのは1か月後…10月の月例更新でしか結果がわからないというところがちょっと締まらない結論です。