Quiconque exécute des tâches dans le Planificateur de tâches Windows rencontrera tôt ou tard des différences de temps d'exécution inexplicables. Un script PHP qui s'exécute en 5 minutes en ligne de commande prend soudainement 20 minutes lorsqu'il est exécuté via le Planificateur de tâches Windows. Même utilisateur, mêmes autorisations, même code : un temps d'exécution quatre fois plus long. Que se passait-il ?
Après des heures de débogage, des sessions de surveillance des processus et d'innombrables comparaisons de configurations, la solution était d'une simplicité déconcertante : le Planificateur de tâches Windows définit par défaut une priorité de processus inférieure. La valeur par défaut des tâches dans le Planificateur de tâches est 7 (En dessous de la normale), pas 4-6 (Normal) comme prévu. Cette différence apparemment minime peut entraîner une dégradation massive des performances lors d'opérations gourmandes en E/S.
Les niveaux de priorité de Windows en détail sont:
| Valeur | Priorité | La description |
|---|---|---|
| 0 | En temps réel | Priorité la plus élevée (attention !) |
| 1 | Haut | Haute priorité |
| 2-3 | Au-dessus de la normale | À propos de Normal |
| 4-6 | Normale | Norme pour les processus interactifs |
| 7 | En dessous de la normale | PAR DÉFAUT dans le planificateur de tâches |
| 8-9 | En dessous de la normale | Encore plus bas |
| 10 | Inactif | Priorité la plus basse |
Le problème de la priorité dans la planification des tâches est multicouche : lorsque vous exportez une tâche et examinez le XML, vous constaterez souvent Non Définition de la priorité. Windows utilisera alors silencieusement la valeur par défaut. 7. L'interface graphique affiche cette valeur lors de l'exportation, mais elle n'est pas explicitement stockée dans la tâche. La priorité inférieure entraîne non seulement une réduction du temps processeur, mais aussi:
- Opérations d'E/S de disque limitées
- Priorité réseau inférieure
- Mauvaise mise en cache du système de fichiers
- Retards dans l'accès à la base de données
Même si vous utilisez le même utilisateur et activez l'option « Exécuter avec les privilèges les plus élevés », la tâche s'exécute dans un environnement de poste/bureau Windows différent avec des priorités différentes. Pour identifier le problème, vous pouvez utiliser PowerShell pour répertorier toutes les tâches avec leurs priorités réelles.:
38b7fa6c77dc344401485cd338ea4128
Presque toutes mes tâches ont été exécutées en priorité 7. Nous corrigeons désormais spécifiquement la priorité de plusieurs tâches à la fois:
38b7fa6c77dc344401485cd338ea4128
Après avoir défini la priorité sur 4 Normalement, mon script PHP s'est exécuté à nouveau dans les 300 secondes prévues. Si vous avez configuré des tâches avec un compte utilisateur spécifique, vous pouvez également le spécifier facilement à la ligne 10 comme suit ::
38b7fa6c77dc344401485cd338ea4128