Każdy, kto uruchamia zadania w harmonogramie zadań systemu Windows, prędzej czy później natknie się na niewytłumaczalne różnice w czasie wykonywania. Skrypt PHP, który działa w wierszu poleceń w ciągu 5 minut, nagle zajmuje 20 minut, jeśli jest uruchamiany za pomocą Harmonogramu zadań systemu Windows. Ten sam użytkownik, te same uprawnienia, ten sam kod – czterokrotnie dłuższy czas wykonania. Co się tam działo?
Po godzinach Debugowanie, Sesje monitorowania procesów i niezliczone porównania konfiguracji — rozwiązanie było szokująco proste: planowanie zadań systemu Windows domyślnie ustawia niższy priorytet procesu. Domyślna wartość zadań w Harmonogramie zadań to 7 (poniżej normy), nie 4-6 (Normalny), jak można się spodziewać. Ta pozornie niewielka różnica może prowadzić do ogromnych spadków wydajności w operacjach intensywnie korzystających z operacji we/wy.
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 wieloaspektowy: 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 Mój skrypt PHP uruchomił się (normalnie) ponownie w oczekiwanych 300 sekundach. Jeśli skonfigurowałeś zadania z konkretnym kontem użytkownika, możesz po prostu wpisać je w wierszu 10 w następujący sposób:
38b7fa6c77dc344401485cd338ea4128