Windows 任务计划程序中的优先级

任何在 Windows 任务计划程序中运行作业的人迟早都会遇到莫名其妙的运行时差异。一个 PHP 脚本在命令行中运行 5 分钟,但通过 Windows 任务计划程序执行时却突然需要 20 分钟。同样的用户、同样的权限、同样的代码,执行时间却翻了四倍。这到底是怎么回事?


经过数小时的调试、进程监视器会话以及无数次的配置比较,解决方案简单得令人恐惧:Windows 任务计划程序默认设置了较低的进程优先级。任务计划程序中任务的默认值是 7 (低于正常水平),不 4-6 (正常)正如预期的那样。这种看似微小的差异可能会导致 I/O 密集型操作的性能大幅下降。

Windows 优先级详细如下:

价值优先事项描述
0即时的最高优先级(警告!)
1高的高优先级
2-3高于正常水平关于正常
4-6普通的交互过程标准
7低于正常水平任务计划程序中的默认设置
8-9低于正常水平甚至更低
10闲置的最低优先级

任务调度中的优先级问题是多层次的:当你导出任务并查看 XML 时,你通常会 优先级设置。Windows 将默默地使用默认值 7. GUI 在导出过程中会显示此值,但不会明确存储在任务中。较低的优先级不仅会导致 CPU 时间减少,而且还会导致:

  • 限制磁盘 I/O 操作
  • 降低网络优先级
  • 文件系统缓存不佳
  • 数据库访问延迟

即使您使用相同的用户并启用“以最高权限运行”,该任务也会在不同的 Windows 工作站/桌面环境中以不同的优先级运行。为了找出问题所在,您可以使用 PowerShell 列出所有任务及其实际优先级。:

38b7fa6c77dc344401485cd338ea4128

我几乎所有的任务都是优先运行的 7. 我们现在专门纠正了多个任务的优先级:

38b7fa6c77dc344401485cd338ea4128

将优先级设置为 4 (正常情况下)我的 PHP 脚本在预期的 300 秒内再次运行。如果您已使用特定用户帐户配置任务,您也可以在第 10 行轻松指定,如下所示。:

38b7fa6c77dc344401485cd338ea4128

背部