Windows タスク スケジューラでジョブを実行する人は、遅かれ早かれ実行時に説明できない違いに遭遇するでしょう。コマンド ラインでは 5 分で実行される PHP スクリプトが、Windows タスク スケジューラ経由で実行すると、突然 20 分かかります。同じユーザー、同じ権限、同じコード – 実行時間は 4 倍。そこで何が起こっていたのでしょうか?
時間外 デバッグ, プロセス モニター セッションと無数の構成比較を行った結果、解決策は驚くほどシンプルでした。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