任何在 Windows 任务计划程序中运行作业的人迟早都会发现运行时中无法解释的差异。在命令行上运行 5 分钟的 PHP 脚本在通过 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