Każdy, kto uruchamia zadania w Harmonogramie zadań systemu Windows, prędzej czy później napotka niewytłumaczalne różnice w czasie wykonania. Skrypt PHP, który uruchamia się w 5 minut w wierszu poleceń, nagle potrzebuje 20 minut, gdy jest wykonywany za pośrednictwem Harmonogramu zadań systemu Windows. Ten sam użytkownik, te same uprawnienia, ten sam kod – czterokrotnie dłuższy czas wykonania. Co się działo?
Po godzinach debugowania, sesjach Monitora Procesów i niezliczonych porównaniach konfiguracji, rozwiązanie okazało się przerażająco proste: Harmonogram zadań systemu Windows domyślnie ustawia niższy priorytet procesu. Domyślna wartość dla zadań w Harmonogramie zadań to 7 (poniżej normy), nie 4-6 (Normalnie), jak oczekiwano. Ta pozornie niewielka różnica może prowadzić do znacznego spadku wydajności w operacjach wymagających dużej ilości operacji wejścia/wyjścia.
Szczegółowe poziomy priorytetów systemu Windows ::
| Wartość | Priorytet | Opis |
|---|---|---|
| 0 | W czasie rzeczywistym | Najwyższy priorytet (uwaga!) |
| 1 | Wysoki | Wysoki priorytet |
| 2-3 | Powyżej normy | O normalności |
| 4-6 | Normalna | Standard dla procesów interaktywnych |
| 7 | Poniżej normy | DOMYŚLNE w Harmonogramie zadań |
| 8-9 | Poniżej normy | Jeszcze niżej |
| 10 | Bezczynny | Najniższy priorytet |
Problem z priorytetami w harmonogramowaniu zadań jest wielowarstwowy: podczas eksportowania zadania i przeglądania pliku XML często można znaleźć NIE Ustawienie priorytetu. System Windows będzie wówczas dyskretnie używał wartości domyślnej. 7. Interfejs graficzny wyświetla tę wartość podczas eksportu, ale nie jest ona jawnie przechowywana w zadaniu. Niższy priorytet nie tylko zmniejsza obciążenie procesora, ale także:
- Ograniczone operacje wejścia/wyjścia dysku
- Niższy priorytet sieci
- Słabe buforowanie systemu plików
- Opóźnienia w dostępie do bazy danych
Nawet jeśli używasz tego samego użytkownika i włączysz opcję „Uruchom z najwyższymi uprawnieniami”, zadanie zostanie uruchomione na innej stacji Windows/w innym środowisku pulpitu z innymi priorytetami. Aby zidentyfikować problem, możesz użyć programu PowerShell, aby wyświetlić listę wszystkich zadań wraz z ich rzeczywistymi priorytetami.:
38b7fa6c77dc344401485cd338ea4128
Prawie wszystkie moje zadania były wykonywane priorytetowo 7. Teraz szczegółowo korygujemy priorytet kilku zadań na raz:
38b7fa6c77dc344401485cd338ea4128
Po ustawieniu priorytetu na 4 (Normalnie) mój skrypt PHP uruchomił się ponownie po oczekiwanych 300 sekundach. Jeśli skonfigurowałeś zadania z konkretnym kontem użytkownika, możesz to łatwo określić w wierszu 10 w następujący sposób.:
38b7fa6c77dc344401485cd338ea4128