Windows Modules Installer Worker(TiWorker.exe)がCPU70%超え!業務時間に暴走する原因と完全対策ガイド

平日の業務時間にパソコンが突然ファン全開となり、タスク マネージャーを開くと「Windows Modules Installer Worker(TiWorker.exe)」が CPU を 70 % も占有している――そんなトラブルは IT 部門にとって定番の悩みです。本記事では Windows 10/Windows 11 を対象に、原因の仕組みから実務で有効だった対策手順、再発防止の設定まで網羅的に解説します。読み終えるころには、自席で動き出す TiWorker に惑わされず、安定した PC 運用を取り戻せるはずです。

目次

なぜ TiWorker.exe が高負荷になるのか ― 背景を正しく理解する

Windows Modules Installer Worker(以下 TiWorker)は、Windows Update がダウンロードした更新プログラムを適用する裏側のプロセスです。アクティブ時間を設定していても、以下のような処理は例外的に実行される場合があります。

  • 累積更新プログラムの適用後に走る コンポーネント クリーンアップ(古いパッチの削除)
  • Servicing Stack Update(SSU)適用後の メタデータ最適化
  • 自動メンテナンス(毎日 03:00 に予約)で呼び出される整合性チェック

これらは Windows Update サービス(wuauserv)が停止していても起動するため、目安として「アクティブ時間=CPU が静か」というわけではありません。また、更新キャッシュが壊れていたり、CBS(Component Based Servicing)マニフェストに破損があると、TiWorker が同じ処理を延々とリトライし、負荷が高止まりします。

よくある誤解 ― アクティブ時間を設定すれば安心?

アクティブ時間は「更新プログラムの インストール と再起動」を避ける設定であって、パッチ適用後のクリーニング工程や Servicing Stack の保守作業は対象外です。スケジューラ上は Maintenance Scheduler のジョブに分類されるため、深夜帯にずらすにはレジストリまたはグループ ポリシーでメンテナンス時刻を変更する必要があります(具体例は後述)。

解決フロー ― 効果の高い順に試すステップ

手順内容期待される効果/補足
1クリーンブート(msconfig でサードパーティ製サービスとスタートアップ無効化)他プロセスとの競合・常駐アプリが原因か切り分け可能。質問者は実施済みで効果なし
2Windows メモリ診断(mdsched.exeメモリエラーが TiWorker 高負荷を誘発していないか検査。実施済みで問題なし
3Windows Modules Installer サービスを「手動(Manual)」に変更(services.msc自動起動を抑え、必要時だけ実行させることで勤務中の暴走を防ぐ。実施済みで効果なし
4Windows Update コンポーネントのリセット
net stop wuauserv%SystemRoot%\SoftwareDistribution%SystemRoot%\System32\catroot2.old へリネーム → net start wuauserv
破損した更新キャッシュやスタックを初期化し、TiWorker の異常ループを解消。👉 次に試すべき推奨手順
5インプレース アップグレード(上書き修復インストール)
Media Creation Tool から ISO をマウントし、「個人用ファイルとアプリを保持」を選択
システムファイル全体を正常な状態へ戻す最終手段。設定やアプリを残したまま OS を再展開できる。バックアップ推奨

各手順の詳細ガイド

手順 1:クリーンブートで競合をあぶり出す

第三者製セキュリティソフトが C:\Windows\WinSxS フォルダをリアルタイム スキャンし続けると、TiWorker のアクセスとバッティングし高負荷を助長するケースが多く報告されています。サービスとスタートアップを すべて 無効化して再起動しても症状が続くか観察することで、OS 以外の要因を排除できます。

手順 2:Windows メモリ診断

メモリエラーは一見無関係に思えますが、IDE 上でビルドを行うとき、TiWorker がメモリ不足で途中失敗し、再試行を繰り返す症例があります。ECC 無しのデスクトップ機や、OC メモリを積んでいるゲーミング PC ほど発生率が高い印象です。診断結果が「問題ありません」なら次の手順へ進みます。

手順 3:サービスを手動化して様子を見る

services.msc で「Windows Modules Installer」を「手動」に設定すると、Windows Update が呼び出すタイミング以外は TiWorker が起動しません。これで収まれば「自動メンテナンス」がトリガーだったと判断できます。効果がなければ更新スタックの破損を疑い、手順 4 へ。

手順 4:Windows Update コンポーネントの完全リセット

最も効果が高い定番策です。以下のバッチ スクリプトを管理者 CMD で実行すれば自動化できます。

@echo off
net stop wuauserv
net stop cryptSvc
net stop bits
net stop msiserver
ren %SystemRoot%\SoftwareDistribution SoftwareDistribution.old
ren %SystemRoot%\System32\catroot2 Catroot2.old
net start wuauserv
net start cryptSvc
net start bits
net start msiserver
echo --- 完了しました。PC を再起動してください ---

PC 再起動後に Dism /Online /Cleanup-Image /AnalyzeComponentStore を実行すると、コンポーネント ストアの肥大化具合と再クリーンアップの要否が確認できます。

手順 5:インプレース アップグレード

上記でも改善しない場合は OS 全体に破損が及んでいる可能性が高いため、Media Creation Tool または setup.exe /auto upgrade /quiet /compat ignorewarning で上書きインストールします。ユーザー データを保持しつつ WinSxSCBS をリセットできるのが強みです。BitLocker ドライブは suspend してから実施してください。

ディープダイブ ― さらなる診断と再発防止策

1. DISM と SFC で CBS マニフェストを修復

手順 4 後でも警告が消えない場合、以下の順で実行します。

Dism /Online /Cleanup-Image /RestoreHealth
sfc /scannow

Dism は Windows Update から正常なコンポーネントを取得して破損ファイルを置き換え、SFC は OS 保護機能でチェックサム不一致を修復します。

2. 自動メンテナンスを深夜帯に変更

企業 PC ならグループ ポリシー一括設定がおすすめです。ローカルで試す場合は以下のレジストリを投入します。

[HKEYLOCALMACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\Maintenance]
"MaintenanceDisabled"=dword:00000000
"MaintenanceStartTime"="03:00"  ; ←24h表記。ここを例えば "02:00" に変更

再起動後、自動メンテナンス (Idle Maintenance) が指定時刻にリスケジュールされ、TiWorker の業務時間出現率を低減できます。

3. 不要な Windows 旧バックアップを切り離す

外付け HDD や NAS に WindowsImageBackup フォルダがあると、コンポーネント クリーンアップの対象としてスキャンされることがあります。ネットワーク越しに巨大 VHDX を走査すると CPU/Disk が跳ね上がるため、検証時は一旦ドライブ レターを外して挙動を比較しましょう。

4. イベント ビューアーでエラーを特定

Applications and Services Logs → Microsoft → Windows → WindowsUpdateClient
および … → CBS 内に出力される ErrorCritical が判断材料です。
例:Event ID 1002 - Warning: A reboot is necessary before servicing... は中断ループの典型。原因を片付けずに放置すると、毎回 TiWorker が再走行します。

検証後のパフォーマンス確認

  • タスク マネージャー の CPU グラフが 24 h で平均 5 % 以下に落ち着いたか
  • 信頼性モニター で「Windows モジュール インストーラー」の失敗イベントが消えたか
  • Performance Monitor%Processor Time (TiWorker) をログ収集し、ピークが退社後にシフトしたか

それでも断続的なスパイクが残るなら、SSD の SMART 生存率やサードパーティ製 AV の 除外リスト を点検しましょう。

FAQ ― よくある質問

Q. TiWorker をタスク マネージャーで 即終了 してもいい? A. 処理途中で強制終了すると、更新コンポーネントが破損し症状が悪化するリスクがあります。負荷が高くてもタスク キルより サービス停止 で安全に切り離しましょう。 Q. Windows Update を完全自動にしないとセキュリティ上まずい? A. 累積更新プログラムは毎月第 2 火曜(日本時間水曜)リリースです。品質更新チャネルを Enterprise/Education など 1 か月遅延に設定すれば、手動メンテナンスと両立できます。 Q. 「一時停止 7 日間」ボタンで高負荷も止まる? A. 一時停止は 新規更新の検出 を止めるだけで、既にダウンロード済みのパッチ後処理やコンポーネント クリーンアップは継続します。原因切り分けには向きません。

まとめ ― 実運用での優先順位

  1. まずは コンポーネント リセット(手順 4)で壊れたキャッシュを一掃
  2. 改善しなければ DISM→SFC を併用して CBS 破損を修復
  3. なお発生する場合 メンテナンス時刻 を深夜帯へ変更し業務影響を回避
  4. 最後の砦として インプレース アップグレード で OS を再展開

管理台数が多い環境では、これらの手順を PowerShell スクリプトIntune/GPO でパッケージ化し、エラー イベントをトリガーに自動適用する運用が理想的です。TiWorker が静かになれば、CPU リソースを本来の業務アプリに振り向けられ、ユーザー満足度と生産性の向上につながります。

付録:スクリプト テンプレート集

PowerShell 版 コンポーネント リセット(一括実行用)

Stop-Service -Name wuauserv, bits, cryptSvc, msiserver -Force
Rename-Item -Path "$env:SystemRoot\SoftwareDistribution" -NewName "SoftwareDistribution.$((Get-Date).ToString('yyyyMMdd'))"
Rename-Item -Path "$env:SystemRoot\System32\catroot2" -NewName "catroot2.$((Get-Date).ToString('yyyyMMdd'))"
Start-Service -Name wuauserv, bits, cryptSvc, msiserver
Write-Host "Windows Update コンポーネントをリセットしました。再起動してください。" -ForegroundColor Green

グループ ポリシー (ADMX) で自動メンテナンス時刻を夜 2 時に変更

コンピューターの構成 → 管理用テンプレート → Windows コンポーネント → 自動メンテナンス
「毎日のメンテナンスの開始時刻を設定する」 = 有効
開始時刻 = 02:00

イベント ビューアーで特定 ID を検知しメール通知 (Task Scheduler + Powershell)

$body = "TiWorker High CPU detected on $(hostname) at $(Get-Date -Format 'yyyy/MM/dd HH:mm')."
Send-MailMessage -To "[email protected]" -From "[email protected]" -SmtpServer "smtp.example.co.jp" -Subject "[Alert] TiWorker High CPU" -Body $body

これらのテンプレートをカスタマイズし、自社環境に合わせて展開すれば、TiWorker トラブルの「探知・隔離・修復・再発防止」を自動化できます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次