"繰り返し間隔" が 1 分のタスクを実行すると、時間の経過とともにタスクの実行が徐々に遅れる事象について

こんにちは。Windows プラットフォーム サポートの丸山です。

本日は、Windows Server 2012 / Windows Server 2012 R2 環境にて "繰り返し間隔" が 1 分のタスクを実行すると、時間の経過とともにタスクの実行が徐々に遅れる事象について、ご紹介させていただきます。

■ 発生する事象について

タスク スケジューラでは、トリガーの作成時に "繰り返し間隔" を設定することができますが、Windows Server 2012 や Windows Server 2012 R2 環境にて、"繰り返し間隔"が 1 分のタスクを実行すると、時間の経過とともにタスクの実行が徐々に遅れる事象が確認されています。
また、Windows Server 2012 環境では、タスクの実行が 10 秒以上遅延すると、タスクが実行されなくなります。
なお、Windows 10 や、Windows Server 2016 環境では、本事象は発生しません。

20161026a
図:繰り返し間隔の設定

上記のタスクを実行し、時間が経過すると、タスクの実行時間が徐々に遅れていきます。
例えば以下のスクリーンショットでは、TEST1 のタスクの実行が 7 秒遅れています。

20161026b
図:タスクの実行が遅れる様子

■ 確認されている回避策について

本事象は以下の回避策が有効であることが判明しています。

(1) ”タスクがすでに実行中の場合に適用される規則” を “新しいインスタンスを開始しない” から、”既存のインスタンスの停止” に変更する。

タスクのプロパティ画面を開き、”設定” タブにある、”タスクがすでに実行中の場合に適用される規則” を “新しいインスタンスを開始しない” から、”既存のインスタンスの停止” に変更することで、タスクの実行が遅延する現象が発生しなくなることを確認しております。
本回避策は、タスクの実行が遅延することが許容されず、毎分 xx 秒ちょうどにタスクを実行したい要件がある場合に有効な回避策となります。

20161026c
図:”既存のインスタンスの停止” を設定した状態

(2) 「スケジュールされた時刻にタスクを開始できなかった場合、すぐにタスクを実行する」を設定する

タスクのプロパティ画面を開き、”設定” タブにある、”スケジュールされた時刻にタスクを開始できなかった場合、すぐにタスクを実行する” のチェックを ON にすることで、Windows Server 2012 環境にてタスクの実行が遅れた場合にも、タスクの実行が停止することがなくなります。
本回避策は、前回の実行時刻より 60 秒以上の間隔をあけてタスクが実行されることが好ましい場合に有効な回避策となります。

20161026d
図:”スケジュールされた時刻にタスクを開始できなかった場合、すぐにタスクを実行する” のチェックを ON にした状態

ご登録いただいているタスクの要件に合わせ、どちらかの回避策を検討いただけますと幸いです。
今後ともどうぞよろしくお願いいたします。

--
丸山 健一 (マルヤマ ケンイチ)
Windows プラットフォームサポート担当
日本マイクロソフト株式会社