Kushdo që ekzekuton detyra në Windows Task Scheduler herët a vonë do të hasë ndryshime të pashpjegueshme në kohën e ekzekutimit. Një skript PHP që ekzekutohet për 5 minuta në rreshtin e komandës papritmas zgjat 20 minuta kur ekzekutohet nëpërmjet Windows Task Scheduler. I njëjti përdorues, të njëjtat leje, i njëjti kod - katër herë më shumë kohë ekzekutimi. Çfarë po ndodhte?
Pas orësh të tëra debugging-u, seancash Process Monitor dhe krahasimesh të panumërta konfigurimi, zgjidhja ishte tmerrësisht e thjeshtë: Windows Task Scheduler vendos një prioritet më të ulët të procesit si parazgjedhje. Vlera parazgjedhur për detyrat në Task Scheduler është 7 (Nën normale), jo 4-6 (Normale) siç pritej. Ky ndryshim në dukje i vogël mund të çojë në degradim masiv të performancës në operacionet me intensivitet I/O.
Nivelet e përparësisë së Windows në detaje janë:
| Vlerë | Përparësi | Përshkrim |
|---|---|---|
| 0 | Në kohë reale | Prioriteti më i lartë (kujdes!) |
| 1 | I lartë | Prioritet i lartë |
| 2-3 | Mbi normalen | Rreth Normale |
| 4-6 | Normale | Standard për proceset interaktive |
| 7 | Nën normale | PARAPRAKISHT në Planifikuesin e Detyrave |
| 8-9 | Nën normale | Edhe më e ulët |
| 10 | Në gjendje joaktive | Prioriteti më i ulët |
Problemi me përparësinë në planifikimin e detyrave është shumështresor: Kur eksportoni një detyrë dhe shikoni XML-në, shpesh do të jo Vendosja e përparësisë. Windows do të përdorë më pas në heshtje vlerën e parazgjedhur. 7. Ndërfaqja grafike e përdoruesit (GUI) e shfaq këtë vlerë gjatë eksportimit, por nuk ruhet në mënyrë të qartë në detyrë. Prioriteti më i ulët jo vetëm që rezulton në më pak kohë të CPU-së, por edhe:
- Operacionet e hyrjes/daljes së diskut të frenuar
- Prioritet më i ulët i rrjetit
- Ruajtje e dobët e memorjes në sistemin e skedarëve
- Vonesa në aksesin në bazën e të dhënave
Edhe nëse përdorni të njëjtin përdorues dhe aktivizoni "Run with the highest privileges", detyra ekzekutohet në një stacion/mjedis tjetër të Windows me përparësi të ndryshme. Për të identifikuar problemin, mund të përdorni PowerShell për të listuar të gjitha detyrat me përparësitë e tyre aktuale.:
38b7fa6c77dc344401485cd338ea4128
Pothuajse të gjitha detyrat e mia u kryen me përparësi 7. Tani ne korrigjojmë në mënyrë specifike përparësinë e disa detyrave menjëherë:
38b7fa6c77dc344401485cd338ea4128
Pasi të keni vendosur përparësinë në 4 (Normalisht) skripti im PHP ekzekutohej përsëri brenda 300 sekondave të pritura. Nëse keni konfiguruar detyra me një llogari specifike përdoruesi, mund ta specifikoni lehtësisht këtë në rreshtin 10 si më poshtë.:
38b7fa6c77dc344401485cd338ea4128