IIS でワーカープロセスのリサイクルが発生した際にイベントログを記録する

IISのワーカープロセスは、不安定にならないよう定期的な時間間隔(1740分ごと)に再起動するように設定されています。この再起動処理をIISはリサイクルと呼んでいます。既定では時間間隔(1740分毎)ですが、リクエストの数(1000万リクエスト毎など)や特定の時間(毎朝03:00)、メモリの使用量などに応じてリサイクルイベントを発生させるよう設定することができます。


リサイクル自体は問題ありませんが、どういったタイミングで起きているかをイベントログで記録することができます。IIS6の既定ではログを記録しないこと、IIS7の既定では一部ログを記録するとなっています。イベントログを出すかどうか調整します。

  • IIS6の場合

既定ではリサイクルイベントのログを記録しないので必要なリサイクルイベントを記録するよう設定します。


管理者権限で、inetpub\adminscriptsにある adsutil.vbs を使用します。コマンドは、cscript adsutil.vbs set w3svc/AppPools/[アプリケーションプール名]/[リサイクルイベント名] trueになります。


リサイクルイベントは次の8つ。


AppPoolRecycleTime

処理時間が上限に達した場合(1740分など)。イベントID(1074)

AppPoolRecycleRequests

受け付けたリクエスト数が上限に達した場合(100万リクエストなど)。イベントID(1075)

AppPoolRecycleSchedule

スケジュールされた時刻になった場合(AM 03:00など)。イベントID(1076)

AppPoolRecycleMemory

プロセスの仮想メモリが上限に達した場合。イベントID(1077)

AppPoolRecycleIsapiUnhealthy

ISAPIワーカープロセスに異常が発生した場合。イベントID(1078)

AppPoolRecycleOnDemand

管理者によってワーカープロセスをリサイクルするよう要求があった場合。イベントID(1079)

AppPoolRecycleConfigChange

アプリケーションプールの設定変更によりプロセスが再起動される場合。イベントID(1080)

AppPoolRecyclePrivateMemory

プロセスのプライベートメモリが上限に達した場合。イベントID(1177)


コマンドラインからの実行例です。

C:\>cd inetpub\adminscripts

C:\Inetpub\AdminScripts>cscript adsutil.vbs set w3svc/AppPools/DefaultAppPool/AppPoolRecycleTime true
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

AppPoolRecycleTime : (BOOLEAN) True

C:\Inetpub\AdminScripts>cscript adsutil.vbs set w3svc/AppPools/DefaultAppPool/AppPoolRecycleRequests true
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

AppPoolRecycleRequests : (BOOLEAN) True

C:\Inetpub\AdminScripts>cscript adsutil.vbs set w3svc/AppPools/DefaultAppPool/AppPoolRecycleSchedule true
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

AppPoolRecycleSchedule : (BOOLEAN) True

C:\Inetpub\AdminScripts>cscript adsutil.vbs set w3svc/AppPools/DefaultAppPool/AppPoolRecycleMemory true
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

AppPoolRecycleMemory : (BOOLEAN) True

C:\Inetpub\AdminScripts>cscript adsutil.vbs set w3svc/AppPools/DefaultAppPool/AppPoolRecycleIsapiUnhealthy true
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

AppPoolRecycleIsapiUnhealthy : (BOOLEAN) True

C:\Inetpub\AdminScripts>cscript adsutil.vbs set w3svc/AppPools/DefaultAppPool/AppPoolRecycleOnDemand true
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

AppPoolRecycleOnDemand : (BOOLEAN) True

C:\Inetpub\AdminScripts>cscript adsutil.vbs set w3svc/AppPools/DefaultAppPool/AppPoolRecycleConfigChange true
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

AppPoolRecycleConfigChange : (BOOLEAN) True

C:\Inetpub\AdminScripts>cscript adsutil.vbs set w3svc/AppPools/DefaultAppPool/AppPoolRecyclePrivateMemory true
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

AppPoolRecyclePrivateMemory : (BOOLEAN) True


  • IIS7の場合

既定ではプライベートメモリ制限、仮想メモリ制限、定期的な間隔のリサイクルイベントの3つを記録します。他に必要なイベントがあれば記録します。IISマネージャでアプリケーションプールの詳細設定から設定を変更できます。


  • まとめ

リサイクルイベントのログは最初は全部記録するようにして、イベントログを眺めながら不要であれば外すという運用でよいと思います。異常な理由で、リサイクルが頻繁に発生するようなら何らかの対策を立てる必要があります。