Iedereen die taken uitvoert in de Windows-taakplanner zal vroeg of laat op onverklaarbare verschillen in runtime stuiten. Een PHP-script dat in 5 minuten op de opdrachtregel wordt uitgevoerd, duurt plotseling 20 minuten wanneer het via Windows Task Scheduler wordt uitgevoerd. Dezelfde gebruiker, dezelfde rechten, dezelfde code – vier keer de uitvoeringstijd. Wat was daar aan de hand?
Na uren Foutopsporing, Procesmonitorsessies en talloze configuratievergelijkingen, de oplossing was schrikbarend eenvoudig: Windows-taakplanning stelt standaard een lagere procesprioriteit in. De standaardwaarde voor taken in Taakplanner is 7 (Onder Normaal), niet 4-6 (Normaal), zoals je zou verwachten. Dit ogenschijnlijk kleine verschil kan leiden tot enorme prestatieverliezen bij I/O-intensieve activiteiten.
De Windows-prioriteitsniveaus in detail zijn:
| Waarde | Prioriteit | Omschrijving |
|---|---|---|
| 0 | Realtime | Hoogste prioriteit (let op!) |
| 1 | Hoog | Hoge prioriteit |
| 2-3 | Boven normaal | Over Normaal |
| 4-6 | Normaal | Standaard voor interactieve processen |
| 7 | Onder normaal | STANDAARD in Taakplanner |
| 8-9 | Onder normaal | Nog lager |
| 10 | Inactief | Laagste prioriteit |
Het probleem met prioriteit bij taakplanning kent meerdere lagen: als u een taak exporteert en naar de XML kijkt, gebeurt dit vaak Nee Prioriteitsinstelling. Windows gebruikt dan stilzwijgend de standaardwaarde. 7. De GUI geeft deze waarde weer tijdens het exporteren, maar deze wordt niet expliciet in de taak opgeslagen. De lagere prioriteit resulteert niet alleen in minder CPU-tijd, maar ook in minder tijd.:
- Beperkte schijf-I/O-bewerkingen
- Lagere netwerkprioriteit
- Slechte cache van bestandssysteem
- Vertragingen in databasetoegang
Zelfs als u dezelfde gebruiker gebruikt en 'Uitvoeren met de hoogste rechten' inschakelt, wordt de taak uitgevoerd in een ander Windows-station/desktopomgeving met andere prioriteiten. Om het probleem te identificeren, kunt u PowerShell gebruiken om alle taken met hun werkelijke prioriteiten weer te geven.:
38b7fa6c77dc344401485cd338ea4128
Bijna al mijn taken werden met prioriteit uitgevoerd 7. We corrigeren nu specifiek de prioriteit van meerdere taken tegelijk:
38b7fa6c77dc344401485cd338ea4128
Nadat u de prioriteit hebt ingesteld op 4 (Normaal gesproken) werd mijn PHP-script binnen de verwachte 300 seconden opnieuw uitgevoerd. Als u taken heeft geconfigureerd met een specifiek gebruikersaccount, kunt u dit eenvoudig als volgt in regel 10 invoeren:
38b7fa6c77dc344401485cd338ea4128