ITよろづや

ITの参考になる情報を備忘録代わりに残していきます

WSUS クリーンアップ ウィザードにてタイムアウト発生、終わらない場合の対処法

WSUS クリーンアップ ウィザードにてタイムアウト発生、終わらない場合の対処法についての情報になります。WSUSを運用していてクリーンアップウィザードが終わらないという情報がマイクロソフトのフォーラムにあがることがありますが、普段から実施していないと、対象データが多い場合は、中々終わらないとか、タイムアウトが発生する要因となるようです。

 

そして、本題のWSUSでクリーンアップウィザードが終わらない場合の対処法についてのマイクロソフトの公開情報です。

WSUS クリーンアップ ウィザードにてタイムアウトが発生する 

 

ここにも書かれている通り、処理するデータが多い場合は、発生する可能性が高いようです。

 

クリーンアップ ウィザードの 1 番上の項目「不要な更新プログラムと更新プログラムのリビジョン」は、クリーンアップの各項目の中でも、特に処理対象のデータ量が多くなりやすい項目です。弊社での実績上では、運用を開始してから数年経過した環境で初めて実行すると、数十時間 ~ 1 日を要することもあるような項目です。

このため、処理の途中でタイムアウトが発生してし、エラーで途中停止してまうことも、しばしばあります。

 

定期的にクリーンアップ ウィザードを実行するのが、一番の対策とはなるとのことなので、システム管理者は運用で定期的に実施するのがベストですね。タスクなどで自動化するのもいいでしょう。

 

 

もしこの事象陥ってしまった場合には、対処方法として、以下の 3 つがあるそうです。

 

対処 1. WSUS データ ベースのインデックス再構成を実施する

対処 2. Powershell より処理を分割して実行する

対処 3. 繰り返しクリーンアップを実行する

 

そして以下は原文そのまま抜粋です。

 

-----------------

対処 1. WSUS データ ベースのインデックス再構成を実施する
以下の記事で紹介しているインデックスの再構築を実施すると、WSUS の処理が効率化されるため、クリーンアップ ウィザードの処理をより効率的に進めることが出来るようになります。インデックスの再構成を定期的に実施していない環境では、まずインデックスの再構成を実施して事象に改善が見られないか確認をします。

WSUS DB インデックスの再構成の手順について
https://social.msdn.microsoft.com/Forums/ja-JP/d60c2970-b4d5-4980-ac2c-27a1dc549113/wsus-db?forum=jpsccmwsus

 

上記の手順を実施しても、まだ事象が改善されない場合には続けて以下の手順を実施します。

 

 

対処 2. Powershell より処理を分割して実行する
実はクリーンアップ ウィザードの 「不要な更新プログラムと更新プログラムのリビジョン」項目は、内部的には 2 つの処理を同時に実行しています。このため、Powershell から 2 つの処理を分けて実行することで、タイムアウトを回避出来ることがあります。

Windows Server 2012 以降の WSUS では、Powershell で以下の 2 つのコマンドを上から順に実行することで、2 つの処理を同時ではなく、それぞれ実行することが出来ます。

 

Windows Server 2012 以降の WSUS の場合

Invoke-WsusServerCleanup -CompressUpdates
Invoke-WsusServerCleanup -CleanupObsoleteUpdates
WSUS 3.0 SP2 の環境の場合には、少し行数が多くなってしまいますが、以下の 2 つのスクリプトPowershell から処理を実行可能です。そのまま Powershell のコンソールに貼り付けて実行していただくことも可能です。

・ WSUS 3.0 SP2 の場合 : その 1

[System.Reflection.Assembly]::LoadWithPartialName('microsoft.updateservices.administration')

$wsus=new-object 'Microsoft.UpdateServices.Administration.AdminProxy'
$wsusrv=$wsus.GetUpdateServerInstance()

$cm=$Wsusrv.GetCleanupManager()
$cs=new-object 'Microsoft.UpdateServices.Administration.CleanupScope'

$cs.CompressUpdates = $True

$cm.PerformCleanup($cs)

 

・ WSUS 3.0 SP2 の場合 : その 2

[System.Reflection.Assembly]::LoadWithPartialName('microsoft.updateservices.administration')

$wsus=new-object 'Microsoft.UpdateServices.Administration.AdminProxy'
$wsusrv=$wsus.GetUpdateServerInstance()

$cm=$Wsusrv.GetCleanupManager()
$cs=new-object 'Microsoft.UpdateServices.Administration.CleanupScope'

$cs.CleanupObsoleteUpdates = $True

$cm.PerformCleanup($cs)

 

対処 3. 繰り返しクリーンアップを実行する
さて上記の 2 つの対処を実施して、それでも事象が改善されない場合には、あとは繰り返し実行するしかありません。「不要な更新プログラムと更新プログラムのリビジョン」は、開始した直後にエラーとなるような状況でなけば、途中まで処理は進んでいます。繰り返し何度も対処 2 の Powershell を実行することで、処理を完了させましょう。

一度「不要な更新プログラムと更新プログラムのリビジョン」を完了出来れば、あとは定期的に実行すれば、いちいちこれらの対処をする必要はなくなります。対処が完了したら、タスク スケジューラ等からクリーンアップを自動的に定期実行するようにしておくと、この事象が再発することを未然に防ぐことが出来るので是非検討ください。

--------------

 

WSUSって意外と軽視されていてサイジングも間違っていて、WSUS Poolが停止されていることなどもあります。ですので、リソースのサイジングも重要ですし、こういった定期メンテナンスも大切になりますので、WSUSをこれから導入する場合や、リプレイスする場合などは見直しをするのも一つかもしれませんね。