スケジュールされたタスクの数が多い場合のエラー 0x80041323

この記事では、多数のスケジュールされたタスクを実行するときに発生するエラー 0x80041323を修正するソリューションを提供します。

適用対象: Windows 7、Windows Server 1、Windows Server 2012 R2
元の KB 番号: 2696472

現象

シナリオを考えてみましょう。

  • 1 つのユーザー アカウントで多数のスケジュールされたタスクを実行する Windows コンピューターがあります。

  • タスクが断続的に失敗し、[LastRun] オプションの下に次のエラー メッセージが表示される場合があります

    タスク スケジューラ サービスがビジー 0x80041323

  • タスク スケジューラの操作ログの下に、次のイベントがログに記録されている場合があります。

    ログ名: Microsoft-Windows-TaskScheduler/Operational
    ソース: Microsoft-Windows-TaskScheduler
    イベント ID: 706
    タスク カテゴリ: 互換性モジュールのタスクの状態の更新に失敗しました
    説明: タスク互換性モジュールがタスク "<task.job>" を必要な状態 0 に更新できませんでした。 追加データ: エラー値: 2147942405。
    このエラーは、次のことを意味します。

    10 進数 -2147216605 / 16 進0x80041323 SCHED_E_SERVICE_TOO_BUSY

    タスク スケジューラ サービスがビジーで処理できません。

  • さらに、タスク キュー クォータまたはエンジン クォータを超えた場合、次のイベントがタスク スケジューラ操作ログに記録される場合もあります。

  • タスク キュークォータを超えた場合:

    イベント ID 131
    説明: タスク スケジューラはタスク "<Task_Name>" を開始できませんでした。タスク キュー内のタスクの数が、現在Task_Queue_Limit>に構成されているクォータを<超えたためです。
    ユーザー アクション: 実行中のタスクの数を減らすか、構成されたキュー クォータを増やします。
    イベント ID 132
    説明: タスク スケジューラ タスク起動キュー クォータは、現在Task_Limitに構成されているタスクのプリセット制限に <近づいています>。
    ユーザー アクション: 実行中のタスクの数を減らすか、構成されたキュー クォータを増やします。

  • エンジン クォータを超えた場合:

    イベント ID 133
    説明: タスク スケジューラは、ユーザー <>User_Name>の TaskEngine <Engine_Nameでタスク Task_Name>を開始<できませんでした。
    ユーザー アクション: 指定したユーザー コンテキストで実行されているタスクの数を減らします。
    イベント ID 134
    説明: ユーザー <User_Name>のタスク エンジン <Engine_Name>は、タスクの事前設定された制限に近づいています。
    ユーザー アクション: 実行中のタスクの数を減らすか、構成されたキュー クォータを増やします。

    注:

    イベント ID 132 とイベント ID 134 は、問題自体ではなく、近づいている問題のインジケーターにすぎません。 この問題は、これらのイベントの後に発生する場合と発生しない場合があります。

原因

コード SCHED_E_SERVICE_TOO_BUSYに基づいて、キューがいっぱいになるとログに記録されます。 上記の問題は、次の場合に発生します。

  1. タスク キュー クォータを超えました。
  2. エンジン クォータを超えています。

解決方法

この特定の問題を解決するには、クォータ キーの値を最大に増やします。

注意

このセクションには、レジストリを変更する方法を示す手順が含まれています。 レジストリを誤って変更すると、深刻な問題が発生することがあります。 レジストリを変更する際には十分に注意してください。 保護を強化するため、レジストリを変更する前にレジストリをバックアップします。 こうしておけば、問題が発生した場合にレジストリを復元できます。

  1. [ スタート] をクリックし、「 regedit」と入力し、Enter キーを押します。
  2. 次のレジストリ キーを見つけてクリックします。 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Schedule\Configuration
  3. [TasksInMemoryQueue] を右クリックし、[編集] をクリックし、[変更] をクリックします。
  4. [ 値データ ] ボックスに「 1000 (Decimal)」と入力します。
  5. [TasksPerHighestPrivEngine] を右クリックし、[編集] をクリックし、[変更] をクリックします。
  6. [ 値データ ] ボックスに「 1000 (Decimal)」と入力します。
  7. [TasksPerLeastPrivEngine] を右クリックし、[編集] をクリックし、[変更] をクリックします。
  8. [ 値データ ] ボックスに「 1000 (Decimal)」と入力します。
  9. レジストリ エディターを終了し、コンピューターを再起動します。

詳細

ジョブ キュー クォータは "TasksInMemoryQueue" 値によって制御され、エンジン クォータは次のレジストリ キーの下にある "TasksPerHighestPrivEngine" と "TasksPerLeastPrivEngine" レジストリ値によって制御されます。

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Schedule\Configuration

  • TasksInMemoryQueue [Default = 75, Max = 1000]
    • セッション マネージャーでキューに登録できる最大タスクを決定します。 この制限を超えると、実行されるようにスケジュールされた新しいタスク インスタンスが破棄され、イベント ID 131 が取得されます。
    • このキューはすべてのタスクで共有されます。
  • TasksPerHighestPrivEngine [Default = 100, Max = 1000]
    • 特定の時点で "昇格された" タスク エンジン (taskeng.exe) に対して RUNNING 状態にすることが許可されるタスク インスタンスの最大数を決定します。
    • ユーザー セッションごとに 1 つのタスク エンジンが存在します (SYSTEM、LOCAL SERVICE、Administrator、USER1、USER2 など)
    • ここで "管理者特権" は、"最高の特権で実行" オプションが選択されているタスクに対応します。
  • TasksPerLeastPrivEngine [Default = 50, Max = 1000]
    • "TasksPerHighestPrivEngine" に似ていますが、管理者特権以外のタスクに対応する点が異なっています。

関連情報

イベント ID 131 - タスク スケジューラ サービス クォータ
イベント ID 132 - タスク スケジューラ サービス クォータ