Prioritás a Windows Feladatütemezőben

Bárki, aki feladatokat futtat a Windows Feladatütemezőben, előbb-utóbb megmagyarázhatatlan futásidejű különbségekkel fog találkozni. Egy PHP szkript, ami 5 perc alatt lefut a parancssorban, hirtelen 20 percet vesz igénybe, amikor a Windows Feladatütemezőn keresztül futtatják. Ugyanaz a felhasználó, ugyanazok az engedélyek, ugyanaz a kód – négyszeres futási idő. Mi is történt valójában?


Órákig tartó hibakeresés, Process Monitor munkamenetek és számtalan konfigurációs összehasonlítás után a megoldás ijesztően egyszerűnek bizonyult: a Windows Feladatütemező 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ális) ahogy várható volt. Ez a látszólag kis különbség hatalmas teljesítményromláshoz vezethet I/O-intenzív 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 többrétegű: Amikor exportál egy feladatot és megnézi az XML-t, gyakran a következőket fogja tapasztalni: 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 (Normális esetben) a PHP szkriptem újra lefutott a várt 300 másodpercben. Ha adott felhasználói fiókkal konfiguráltad a feladatokat, akkor ezt a 10. sorban is könnyen megadhatod az alábbiak szerint.:

38b7fa6c77dc344401485cd338ea4128

Vissza