Bárki, aki a Windows feladatütemezőjében futtat feladatokat, előbb-utóbb megmagyarázhatatlan futásidejű különbségekre bukkan. Egy PHP-szkript, amely 5 perc alatt fut le a parancssorban, hirtelen 20 percet vesz igénybe, ha a Windows Feladatütemezőn keresztül fut. Ugyanaz a felhasználó, ugyanazok a jogok, ugyanaz a kód – négyszerese a végrehajtási időnek. Mi volt ott?
Órák után Hibakeresés, Folyamatfigyelő munkamenetek és számtalan konfiguráció-összehasonlítás, a megoldás megdöbbentően egyszerű volt: a Windows feladatütemezése alapértelmezés szerint alacsonyabb folyamatprioritást állít be. A Feladatütemezőben a feladatok alapértelmezett értéke 7 (Normális alatt), nem 4-6 (Normál), ahogy az elvárható. Ez a látszólag kis különbség hatalmas teljesítményveszteséghez vezethet az I/O-igényes műveletek során.
A Windows prioritási szintjei részletesen a következők::
| Érték | Prioritás | Leírás |
|---|---|---|
| 0 | Valós idejű | Legmagasabb prioritás (figyelem!) |
| 1 | Magas | Magas prioritás |
| 2-3 | Normális felett | A Normálról |
| 4-6 | Normál | Interaktív folyamatok szabványa |
| 7 | Normál alatt | ALAPÉRTELMEZETT a Feladatütemezőben |
| 8-9 | Normál alatt | Még alacsonyabb |
| 10 | Tétlen | Legalacsonyabb prioritás |
A feladatütemezés prioritásával kapcsolatos probléma sokrétű: Amikor exportál egy feladatot és megtekinti az XML-t, gyakran találkozni fog... nem Prioritásbeállítás. A Windows ezután csendben fogja használni az alapértelmezett értéket 7. A grafikus felhasználói felület exportálás közben megjeleníti ezt az értéket, de ez nincs explicit módon tárolva a feladatban. Az alacsonyabb prioritás nemcsak kevesebb CPU-időt eredményez, hanem:
- Szabályozott lemez I/O műveletek
- Alacsonyabb hálózati prioritás
- Gyenge fájlrendszer gyorsítótárazás
- Késések az adatbázis-hozzáférésben
Még ha ugyanazt a felhasználót használja és engedélyezi a „Futtatás legmagasabb jogosultságokkal” beállítást, a feladat egy másik Windows állomáson/asztali környezetben fut, eltérő prioritásokkal. A probléma azonosításához a PowerShell segítségével listázhatja az összes feladatot a tényleges prioritásaikkal.:
38b7fa6c77dc344401485cd338ea4128
Szinte minden feladatom prioritással futott 7. Most már konkrétan több feladat prioritását korrigáljuk egyszerre:
38b7fa6c77dc344401485cd338ea4128
Miután beállította a prioritást 4 A PHP szkriptem (normálisan) újra lefutott a várt 300 másodperc alatt. Ha egy adott felhasználói fiókkal konfigurált feladatokat, egyszerűen beírhatja ezt a 10. sorba az alábbiak szerint:
38b7fa6c77dc344401485cd338ea4128