本文提供了一种解决方案,用于修复运行大量计划任务时发生的错误0x80041323。
适用于: Windows 7 Service Pack 1、Windows Server 2012 R2原始 KB 数: 2696472
现象
请考虑以下方案:
- 你有一台 Windows 计算机,该计算机在一个用户帐户下运行大量计划任务。
- 任务间歇性失败,在 LastRun 选项下,你可能会看到以下错误消息
任务计划程序服务太忙0x80041323
- 在任务计划程序操作日志下,可能会看到以下事件日志:
日志名称:Microsoft-Windows-TaskScheduler/Operational 来源:Microsoft-Windows-TaskScheduler 事件 ID:706 任务类别:兼容性模块任务状态更新失败 说明:任务兼容性模块未能将任务“<task.job>”更新为所需的状态 0。 其他数据:错误值:2147942405。 此错误进一步意味着:
for decimal -2147216605/ hex 0x80041323 SCHED_E_SERVICE_TOO_BUSY
任务计划程序服务太忙,无法处理
- 此外,如果任务队列配额或引擎配额超出,你可能还会注意到以下事件记录在任务计划程序操作日志中:
- 如果任务队列配额超出:
事件 ID 131 说明:任务计划程序无法启动任务“<Task_Name>”;因为任务队列中的任务数超过当前配置为 <Task_Queue_Limit的>配额。 用户操作:减少正在运行的任务数或增加配置的队列配额。 事件 ID 132 说明:任务计划程序任务启动队列配额即将接近其当前配置为 <Task_Limit>的任务的预设限制。 用户操作:减少正在运行的任务数或增加配置的队列配额。
- 如果引擎配额超过:
事件 ID 133 说明:任务计划程序无法在 TaskEngine Engine_Name 中为用户<User_Name>启动任务<Task_Name>。> < 用户操作:减少在指定用户上下文中运行的数量任务。 事件 ID 134 说明:用户<>User_Name的任务引擎<Engine_Name>接近其预设的任务限制。 用户操作:减少正在运行的任务数或增加配置的队列配额。
注意
事件 ID 132 和事件 ID 134 只是即将出现的问题的指示器,而不是问题本身。 此问题可能会在这些事件之后发生或可能不会发生。
原因
根据代码 SCHED_E_SERVICE_TOO_BUSY,队列已满时会记录此代码。 如果出现以下情况,则会发生上述问题:
- 超过任务队列配额。
- 超过引擎配额。
解决方法
若要解决此问题,请将配额密钥的值增加到最大值。
注意
本节包含说明如何修改注册表的步骤。 但是,如果注册表修改不正确,可能会发生严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。
- 单击“开始”,键入 regedit,然后按 Enter。
- 找到并单击以下注册表项:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Schedule\Configuration - 右键单击 TasksInMemoryQueue,单击“编辑**”**,然后单击“修改”。
- 在 “值”数据 框中,键入 1000 (十进制)。
- 右键单击 TasksPerHighestPrivEngine,单击“编辑**”**,然后单击“修改”。
- 在 “值”数据 框中,键入 1000 (十进制)。
- 右键单击 TasksPerLeastPrivEngine,单击“编辑**”**,然后单击“修改”。
- 在 “值”数据 框中,键入 1000 (十进制)。
- 退出 注册表编辑器 并重新启动计算机。
详细信息
作业队列配额通过“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)运行状态的任务实例的最大数目。
- 每个用户会话存在一个任务引擎(例如 SYSTEM、LOCAL SERVICE、Administrator、USER1、USER2 等)
- 此处的“提升”对应于选择了“以最高特权运行”选项的任务。
- TasksPerLeastPrivEngine [Default = 50, Max = 1000]
- 类似于“TasksPerHighestPrivEngine”,只不过它对应于未提升的任务。