Zrozumienie średniej obciążenia w systemie Linux

Understanding Load Average Linux



Średnia obciążenia jest miarą ilości pracy w porównaniu z wolnymi cyklami procesora dostępnymi na procesorze systemowym. W tym artykule zdefiniuję termin, zademonstruję, jak Linux oblicza tę wartość, a następnie przedstawię wgląd w interpretację obciążenia systemu.

Zanim zagłębimy się w średnie obciążenia systemu Linux, musimy zbadać różne sposoby obliczania obciążenia i zająć się najczęstszym pomiarem obciążenia procesora – procentem.







Windows oblicza obciążenie inaczej niż Linux, a ponieważ Windows był historycznie bardziej popularny na komputerach stacjonarnych, definicja obciążenia systemu Windows jest ogólnie rozumiana przez większość użytkowników komputerów. Większość użytkowników systemu Windows widziała obciążenie systemu w menedżerze zadań wyświetlane jako wartość procentowa w zakresie od 0% do 100%.



W systemie Windows uzyskuje się to poprzez zbadanie, jak zajęty jest Proces bezczynności systemu jest i użycie odwrotności do reprezentowania obciążenia systemu. Na przykład, jeśli bezczynny wątek jest wykonywany przez 99% czasu, obciążenie procesora w systemie Windows wyniesie 1%. Ta wartość jest łatwa do zrozumienia, ale dostarcza mniej szczegółowych informacji na temat prawdziwego stanu systemu.



W Linuksie średnia obciążenia jest zamiast tego reprezentowana przez liczbę dziesiętną zaczynającą się od 0,00. Wartość można z grubsza zdefiniować jako liczbę procesów w ciągu ostatniej minuty, które musiały czekać na swoją kolej na wykonanie. W przeciwieństwie do systemu Windows średnia obciążenia systemu Linux nie jest natychmiastowym pomiarem. Obciążenie podawane jest w trzech wartościach – średnia z jednej minuty, średnia z pięciu minut i średnia z piętnastu minut.





Zrozumienie średniej obciążenia w systemie Linux

Na początku ta dodatkowa warstwa szczegółów wydaje się niepotrzebna, jeśli chcesz po prostu poznać aktualny stan obciążenia procesora w systemie. Ale ponieważ podane są średnie z trzech okresów czasu, a nie natychmiastowy pomiar, możesz uzyskać pełniejszy obraz zmian obciążenia systemu w czasie za pomocą jednego spojrzenia na trzy liczby

Wyświetlanie średniego obciążenia jest proste. W wierszu poleceń możesz używać różnych poleceń. Po prostu używam polecenia w:



źródło@panna[~]# w
dwadzieścia jeden: 08:43w górę38dni,4:3. 4,4 użytkownicy, średnie obciążenie:3.11,2,75,2,70

Reszta polecenia pokaże, kto jest zalogowany i co wykonuje, ale dla naszych celów ta informacja jest nieistotna, więc wyciąłem ją z powyższego ekranu.

W idealnym systemie żaden proces nie powinien być wstrzymywany przez inny proces (lub wątek), ale w systemie jednoprocesorowym, dzieje się tak, gdy obciążenie przekracza 1,00.

Niezwykle ważne są tutaj słowa system jednoprocesorowy. Jeśli nie używasz starożytnego komputera, twoja maszyna prawdopodobnie ma wiele rdzeni procesora. W maszynie na której jestem mam 16 rdzeni:

źródło@panna[~]# nproc
16

W tym przypadku średnia obciążenia wynosząca 3,11 wcale nie jest alarmująca. Oznacza to po prostu, że nieco więcej niż trzy procesy były gotowe do wykonania, a rdzenie procesora były obecne, aby obsłużyć ich wykonanie. W tym konkretnym systemie obciążenie musiałoby osiągnąć 16, aby można je było uznać za 100%.

Aby przetłumaczyć to na procentowe obciążenie systemu, możesz użyć tego prostego, jeśli nie tępego polecenia:

Kot /procent/loadavg| skaleczenie -C 1-4 | wyrzucił 'skala=2; ($ (/`nproc`) * 100 ' | pne -ten

Ta sekwencja poleceń izoluje 1-minutową średnią za pomocą cięcia i powtarza ją, podzieloną przez liczbę rdzeni procesora, za pomocą bc, kalkulatora wiersza poleceń, w celu uzyskania wartości procentowej.

Ta wartość nie jest w żadnym wypadku naukowa, ale zapewnia przybliżone przybliżenie obciążenia procesora w procentach.

Minuta nauki, całe życie do opanowania

W poprzedniej sekcji umieściłem w cudzysłowie 100% przykład obciążenia 16,0 na 16 rdzeniach procesora, ponieważ obliczanie obciążenia w Linuksie jest nieco bardziej mgliste niż w Windows. Administrator systemu musi pamiętać, że:

  • Obciążenie wyraża się w oczekujących procesach i wątkach
  • Nie jest to wartość chwilowa, raczej średnia i
  • Jego interpretacja musi uwzględniać liczbę rdzeni procesora oraz
  • Może nadmiernie nadmuchać I/O czeka jak odczyty dysku

Z tego powodu opanowanie obciążenia procesora w systemie Linux nie jest całkowicie kwestią empiryczną. Nawet gdyby tak było, samo obciążenie procesora nie jest wystarczającym miernikiem ogólnego wykorzystania zasobów systemowych. W związku z tym doświadczony administrator systemu Linux rozważy obciążenie procesora zgodnie z innymi wartościami, takimi jak oczekiwanie na we/wy i procent jądra w stosunku do czasu systemowego.

Czekaj we/wy

I/O wait najłatwiej zobaczyć za pomocą górnego polecenia:

Na powyższym zrzucie ekranu podświetliłem wartość oczekiwania I/O. Jest to procent czasu, przez który procesor czekał na zakończenie poleceń wejściowych lub wyjściowych. Zwykle wskazuje to na dużą aktywność dysku. Chociaż sam wysoki procent oczekiwania może nie pogorszyć znacząco zadań związanych z procesorem, zmniejszy wydajność we/wy dla innych zadań i sprawi, że system będzie spowalniał.

Wysokie oczekiwanie we/wy bez żadnej oczywistej przyczyny może wskazywać na problem z dyskiem. Użyj polecenia dmesg, aby sprawdzić, czy wystąpiły jakieś błędy.

Jądro a czas systemowy

Wyróżnione powyżej wartości reprezentują czas użytkownika i jądra (systemu). Jest to podział całkowitego zużycia czasu procesora przez użytkowników (tj. aplikacje itp.) i jądro (tj. interakcję z urządzeniami systemowymi). Dłuższy czas użytkownika będzie wskazywał na większe wykorzystanie procesora przez programy, w których wyższy czas jądra będzie oznaczał większe przetwarzanie na poziomie systemu.

Dość średnie obciążenie

Poznanie relacji średniego obciążenia do rzeczywistej wydajności systemu zajmuje trochę czasu, ale niedługo zobaczysz wyraźną korelację. Uzbrojony w zawiłości wskaźników wydajności systemu, będziesz w stanie podejmować lepsze decyzje dotyczące aktualizacji sprzętu i wykorzystania zasobów programu.