任何在 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