Den som kör jobb i Windows Task Scheduler kommer förr eller senare att stöta på oförklarliga skillnader i körtid. Ett PHP-skript som körs på 5 minuter på kommandoraden tar plötsligt 20 minuter när det körs via Windows Task Scheduler. Samma användare, samma behörigheter, samma kod – fyra gånger så lång körtid. Vad var det som pågick?
Efter timmar av felsökning, Process Monitor-sessioner och otaliga konfigurationsjämförelser var lösningen skrämmande enkel: Windows Task Scheduler ställer in en lägre processprioritet som standard. Standardvärdet för uppgifter i Task Scheduler är 7 (Under normalt), inte 4-6 (Normalt) som förväntat. Denna till synes lilla skillnad kan leda till massiv prestandaförsämring i I/O-intensiva operationer.
Windows prioritetsnivåer i detalj är:
| Värde | Prioritet | Beskrivning |
|---|---|---|
| 0 | Realtid | Högsta prioritet (varning!) |
| 1 | Hög | Hög prioritet |
| 2-3 | Över normalt | Om Normal |
| 4-6 | Normal | Standard för interaktiva processer |
| 7 | Under det normala | STANDARD i Aktivitetsschemaläggaren |
| 8-9 | Under det normala | Ännu lägre |
| 10 | På tomgång | Lägsta prioritet |
Problemet med prioritering i uppgiftsschemaläggning är flerskiktat: När du exporterar en uppgift och tittar på XML-filen kommer du ofta att inga Prioritetsinställning. Windows använder sedan standardvärdet i tysthet. 7. Det grafiska gränssnittet visar detta värde under exporten, men det lagras inte explicit i uppgiften. Den lägre prioriteten resulterar inte bara i mindre CPU-tid, utan också:
- Begränsade disk-I/O-operationer
- Lägre nätverksprioritet
- Dålig cachning av filsystemet
- Förseningar i databasåtkomst
Även om du använder samma användare och aktiverar "Kör med högsta behörighet" körs uppgiften i en annan Windows-stations-/skrivbordsmiljö med andra prioriteter. För att identifiera problemet kan du använda PowerShell för att lista alla uppgifter med deras faktiska prioriteter.:
38b7fa6c77dc344401485cd338ea4128
Nästan alla mina uppgifter kördes med prioritet 7. Vi korrigerar nu specifikt prioriteten för flera uppgifter samtidigt:
38b7fa6c77dc344401485cd338ea4128
Efter att ha prioriterat 4 (Normalt) kördes mitt PHP-skript igen inom de förväntade 300 sekunderna. Om du har konfigurerat uppgifter med ett specifikt användarkonto kan du också enkelt ange detta på rad 10 enligt följande.:
38b7fa6c77dc344401485cd338ea4128