Enhver, der kører job i Windows opgaveplanlægning, vil før eller siden støde på uforklarlige forskelle i kørselstid. Et PHP-script, der kører på 5 minutter på kommandolinjen, tager pludselig 20 minutter, når det køres via Windows Task Scheduler. Samme bruger, samme rettigheder, samme kode – fire gange udførelsestiden. Hvad foregik der?
Efter timer Debugging, Procesmonitorsessioner og utallige konfigurationssammenligninger, løsningen var chokerende enkel: Windows opgaveplanlægning sætter en lavere procesprioritet som standard. Standardværdien for opgaver i Task Scheduler er 7 (Under normal), ikke 4-6 (Normal), som du ville forvente. Denne tilsyneladende lille forskel kan føre til massive ydeevnetab i I/O-intensive operationer.
Windows-prioritetsniveauerne er i detaljer:
| Værdi | Prioritet | Beskrivelse |
|---|---|---|
| 0 | Realtid | Højeste prioritet (forsigtig!) |
| 1 | Høj | Høj prioritet |
| 2-3 | Over normal | Om Normal |
| 4-6 | Normal | Standard for interaktive processer |
| 7 | Under normalen | STANDARD i Opgaveplanlægger |
| 8-9 | Under normalen | Endnu lavere |
| 10 | Ledig | Laveste prioritet |
Problemet med prioritering i opgaveplanlægning er mangesidet: Når du eksporterer en opgave og ser på XML-filen, vil du ofte finde ingen Prioritetsindstilling. Windows vil derefter lydløst bruge standardværdien 7. Den grafiske brugergrænseflade viser denne værdi under eksport, men den gemmes ikke eksplicit i opgaven. Den lavere prioritet resulterer ikke kun i mindre CPU-tid, men også:
- Begrænsede disk I/O-operationer
- Lavere netværksprioritet
- Dårlig caching af filsystemet
- Forsinkelser i databaseadgang
Selv hvis du bruger den samme bruger og aktiverer "Kør med højeste rettigheder", kører opgaven i et andet Windows-stations-/skrivebordsmiljø med andre prioriteter. For at identificere problemet kan du bruge PowerShell til at liste alle opgaver med deres faktiske prioriteter.:
38b7fa6c77dc344401485cd338ea4128
Næsten alle mine opgaver blev prioriteret 7. Vi korrigerer nu specifikt prioriteten for flere opgaver på én gang:
38b7fa6c77dc344401485cd338ea4128
Efter at have indstillet prioriteten til 4 Mit PHP-script kørte (normalt) igen inden for de forventede 300 sekunder. Hvis du har konfigureret opgaver med en specifik brugerkonto, kan du blot indtaste denne i linje 10 som følger:
38b7fa6c77dc344401485cd338ea4128