Chciałbym wiedzieć, czy wyjście linuksa opartego na Red-Hat może być inaczej interpretowane przez linuks oparty na Debianie.
Aby uczynić pytanie jeszcze bardziej szczegółowym, szukam, aby zrozumieć, w jaki sposób interpretowana jest „średnia obciążenia” z pierwszego wiersza top
polecenia w systemie Red-Hat i jak to sprawdzić za pomocą oficjalnego kodu ro dokumentacji.
[Istnieje wiele sposobów podejścia do tego tematu, z których wszystkie są akceptowalnymi odpowiedziami na pytanie]
Jednym potencjalnym podejściem byłoby znalezienie, gdzie te informacje są oficjalnie udokumentowane.
Innym byłoby znalezienie wersji kodu, która top
jest zbudowana w konkretnej dystrybucji i wersji, nad którą pracuję.
Otrzymuję polecenie:
top - 13:08:34 up 1:19, 2 users, load average: 0.02, 0.00, 0.00
Tasks: 183 total, 1 running, 182 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 96.8%id, 2.7%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3922520k total, 788956k used, 3133564k free, 120720k buffers
Swap: 2097148k total, 0k used, 2097148k free, 344216k cached
W takim przypadku jak mogę zinterpretować średnią wartość obciążenia ?
Udało mi się ustalić, że średnie obciążenie wynosi około ostatniej chwili, z jednego źródła dokumentacji i że należy je zinterpretować po pomnożeniu przez 100, przez inne źródło dokumentacji.
Pytanie brzmi:
czy jest obciążone 0,02% czy 2%?
Źródła i wersje dokumentacji:
1) Pierwszy z gwiazdkami
TOP(1) Linux User’s Manual TOP(1)
NAME
top - display Linux tasks
Źródło: man top
w mojej dystrybucji RedHat
Ubuntu ma również wersję z „zadaniami”, która nie wyjaśnia średniej obciążenia w:
http://manpages.ubuntu.com/manpages/precise/man1/top.1.html
2) Drugi zaczyna się od
TOP(1) User Commands TOP(1)
NAME top
top - display Linux processes
Źródło:
http://man7.org/linux/man-pages/man1/top.1.htm
3) Ten zaczyna się od:
TOP(1)
NAME
top - display and update information about the top cpu processes
Źródło: http://www.unixtop.org/man.shtml najpierw jeden, można zobaczyć w lub i nie ma żadnego wytłumaczenia dla formatu wyjściowego (ani o średnim obciążeniu , w którym jestem zainteresowany) . Sekund jeden, zawiera krótkie wyjaśnienie, wskazując, że średnie obciążenie ma do czynienia z ostatnim 1 minutę, ale nic o interpretacji jego wartości!
man top
RHEL
online ubuntu documentation
Cytuję bezpośrednio z drugiego źródła:
2a. Średnie UPTIME i LOAD
Ta część składa się z pojedynczego wiersza zawierającego:
nazwę programu lub okna, w zależności od trybu wyświetlania,
aktualny czas i czas od ostatniego rozruchu
łączna liczba użytkowników
obciążenia systemu przez średnią z ostatnich 1, 5 i 15 minut
Tak więc, jeśli to wyjaśnienie jest rzeczywiście poprawne, wystarczy zrozumieć, że średnia obciążenia wynosi około ostatniej minuty.
Ale to nie wyjaśnia formatu liczby.
W trzecim wyjaśnieniu jest napisane, że:
Podając liczby średnich obciążeń, należy je pomnożyć przez 100.
To wyjaśnienie sugeruje, że 0,02 oznacza 2%, a nie 0,02%. Ale czy to prawda? Dodatkowo, czy jest to poprawne dla wszystkich dystrybucji Linuksa i potencjalnie różnych implementacji top
?
Aby znaleźć odpowiedź na to pytanie, próbowałem przejść przez kod, przeszukując go online. Ale znalazłem tam przynajmniej dwie różne wersje top
związane z RHEL! builtin-top.c
i refactored top.c
. Obie chronione prawem autorskim przez Red-Hat, jak napisano w zawiadomieniu na początku kodu, i dlatego wydaje się logiczne, że RHEL używa jednego z nich.
http://lxr.free-electrons.com/source/tools/perf/builtin-top.c
http://lxr.free-electrons.com/source/tools/perf/util/top.c
Zanim zagłębiłem się w ten kod, chciałem uzyskać opinię na temat tego, gdzie należy się skoncentrować, aby dokładnie zrozumieć, w jaki sposób interpretowane jest obciążenie procesora?
Z informacji podanych w odpowiedziach poniżej, oprócz niektórych osobistych poszukiwań, zauważyłem, że:
1 - top
Używam tego, co jest zawarte w pakiecie procps-3.2.8. Które można zweryfikować za pomocą top -v
.
2 - W wersji procps-3.2.8
, którą pobrałem z oficjalnej strony, wydaje się, że narzędzie uptime
pobiera informacje bezpośrednio z procfs
pliku /proc/loadavg
(nie korzystając z funkcji linux getloadavg()
).
3 - Teraz dla top
polecenia również nie używa funkcji getloadavg()
. Udało mi się zweryfikować, top
czy rzeczywiście robi to samo, couptime
narzędzie do wyświetlania średnich obciążeń. W rzeczywistości wywołuje funkcję uptime
narzędzia, która pobiera informacje z procfs
pliku /proc/loadavg
.
Wszystko wskazuje więc na /proc/loadavg
plik! Dlatego, aby dokładnie zrozumieć load average
wytworzony przez top
, należy przeczytać kod jądra, aby zobaczyć, jak plik loadavg
jest zapisywany.
Istnieje także doskonały artykuł wskazany w jednej z odpowiedzi, który zawiera wyjaśnienie dla laika trzech wartości loadavg
.
Tak więc pomimo faktu, że wszystkie odpowiedzi były równie przydatne i pomocne, zamierzam zaznaczyć tę, która wskazywała na artykuł
http://www.linuxjournal.com//article/9001 jako „odpowiedź” na moje pytanie. Dziękujemy wszystkim za wkład!
Dodatkowo od pytania Zrozumienie górnej i średniej obciążenia znalazłem link do kodu źródłowego jądra, który wskazuje miejsce, w którym loadavg
jest obliczany. Jak się wydaje, istnieje ogromny komentarz wyjaśniający, jak to działa, również ta część kodu jest w C
!
Link do kodu to http://lxr.free-electrons.com/source/kernel/sched/loadavg.c
Znowu nie próbuję angażować się w żadną formę plagiatu, po prostu dodaję to dla kompletności. Powtarzam więc, że link do kodu jądra został znaleziony w jednej z odpowiedzi w Zrozumienie górnej i średniej obciążenia ...
źródło
top -v
)Odpowiedzi:
Obciążenie procesora to długość kolejki uruchamiania, tj. Długość kolejki procesów oczekujących na uruchomienie.
uptime
Komenda może być używany, aby zobaczyć średnią długość kolejki przejechany ostatniej chwili, ostatnie pięć minut, a ostatnie 15 minut, podobnie jak to, co zwykle wyświetlanetop
.Wysoka wartość obciążenia oznacza, że kolejka uruchamiania jest długa. Niska wartość oznacza, że jest krótka. Tak więc, jeśli średnia wartość obciążenia w ciągu jednej minuty wynosi 0,05, oznacza to, że średnio w tej minucie było 0,05 procesów oczekujących na uruchomienie w kolejce uruchamiania. To nie jest procent. To jest, AFAIK, to samo na wszystkich Uniksach (chociaż niektóre Uniky mogą nie liczyć procesów oczekujących na operacje we / wy, co, jak sądzę, robi Linux; OpenBSD tylko przez pewien czas zliczał wątki jądra, więc obciążenie zawsze wynosiło 1 lub więcej).
Narzędzie Linux
top
pobiera wartości obciążenia z jądra, do którego je zapisuje/proc/loadavg
. Patrząc na źródłaprocps-3.2.8
, widzimy, że:sprint_uptime()
wywoływana jest funkcjatop.c
.proc/whattime.c
i rozmówloadavg()
wproc/sysinfo.c
.LOADAVG_FILE
aby odczytać średnie obciążenia.LOADAVG_FILE
jest zdefiniowany wcześniej jako"/proc/loadavg"
.źródło
top
iuptime
nie są narzędziami POSIX, agetloadavg()
funkcja biblioteki również nie jest zdefiniowana w POSIX (ma jednak rodowód BSD).top
pliku procfs loadavg ...Średnia obciążenia jest zwykle obliczana przez jądro. Aplikacje takie jak
top
iuptime
mogą korzystać zgetloadavg(3)
wywołania biblioteki, aby uzyskać do nich dostęp (ma być przenośny w różnych wersjach Uniksa). W systemie Linux zwykle skutkuje to odczytem z/proc/loadavg
. W FreeBSD jest to wywołanie systemowe.Na przykład:
uptime
itop
oba wykonują podobne połączenia w celu uzyskania swoich danych.Teraz średnie wartości obciążenia 1/5/15 minuty to liczba procesów w kolejce uruchomieniowej. Różne systemy operacyjne mogą to obliczać na różne sposoby; największą różnicą jest zwykle to, czy procesy oczekujące na We / Wy (np. zablokowane na dysku) liczą się jako działające, czy nie. W Linuksie są.
Tak więc średnia obciążenia wynosząca 3,4 oznacza, że w kolejce uruchomień w oknie próbki było średnio 3,4 procesów (1, 5, 15 minut).
Wysoka średnia obciążenia niekoniecznie oznacza przeciążony serwer. Jeśli masz 16 rdzeni, średnia wartość obciążenia może wynosić 16 bez obciążenia. Możesz także mieć wiele
fork()
wywołań aplikacji, które mogą spowodować utworzenie / zniszczenie dużej liczby procesów, co prowadzi do wysokiego średniego obciążenia, ale bez znacznego wpływu na wydajność serwera. Należy go traktować jedynie jako przewodnik wraz z innymi miernikami, takimi jak% zajętości procesora.źródło
Średnia obciążenia nie jest czymś specyficznym dla konkretnego narzędzia lub dystrybucji, jest to pomiar dostarczany przez jądro, a ściślej program planujący, dlatego jest to pomiar niezależny od dystrybucji. Pomiar jest rejestrowany w systemie plików proc
/proc
W interpretacji miara średniej obciążenia nie wskazuje, jak ciężko pracuje procesor, ale ile pracy należy wykonać. Nie sądzę, aby naprawdę trzeba było go pomnożyć przez cokolwiek, ponieważ jest to bezpośredni pomiar liczby procesów w stanie umożliwiającym uruchomienie lub nieprzerwanym.
Spróbuj sprawdzić następujące dwie strony podręcznika:
getloadavg(3)
iuptime
uzyskać więcej informacji.Średni wskaźnik obciążenia może być początkowo trudny do zrozumienia, myślę, że wiele osób uważa, że to wskazuje na to, jak ciężko działa procesor, ale tak naprawdę nie jest to.
źródło
getloadavg()
opisie funkcji jest tą samą średnią wartością obciążenia,top
którą pokazuje polecenie w rhel? Pytam o to, ponieważ przeprowadziłem wyszukiwanie pełnotekstowe w nieokreślonej zawartości pakietu procps-3.2.8 (co wskazuje komendatop -v
) i nie ma ani jednej wzmianki o funkcji getloadavg ()! Być może top oblicza średnią wartość obciążenia w inny sposób ...