Prioritás a Windows Feladatütemezőben

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ékPrioritásLeírás
0Valós idejűLegmagasabb prioritás (figyelem!)
1MagasMagas prioritás
2-3Normális felettA Normálról
4-6NormálInteraktív folyamatok szabványa
7Normál alattALAPÉRTELMEZETT a Feladatütemezőben
8-9Normál alattMég alacsonyabb
10TétlenLegalacsonyabb 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

Vissza