Windowsタスクスケジューラの優先度

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

バック