Jak zrozumieć zużycie pamięci i średnie obciążenie serwera Linux

57

Korzystam z serwera linux, który ma 128 GB pamięci i 24 rdzenie. Używam góry, aby zobaczyć, ile to jest używane. Jego wyniki są wklejane na końcu wpisu. Oto dwa pytania:

(1) Widzę, że każdy z uruchomionych procesów zajmuje bardzo mały procent pamięci (% MEM nie więcej niż 0,2%, a większość zaledwie 0,0%), ale jak prawie cała pamięć jest prawie używana, jak w czwartym wierszu wyniku ( „Mem: 130766620k łącznie, 130161072k używane, 605548k wolne, 919300k buforów”)? Suma wykorzystanego procentu pamięci we wszystkich procesach wydaje się mało prawdopodobna, aby osiągnąć prawie 100%, prawda?

(2) jak rozumieć średnią obciążenia w pierwszym wierszu („średnia obciążenia: 14.04, 14.02, 14.00”)?

Dziękuję i pozdrawiam!

Edytować:

Dzięki!

Bardzo lubię też słyszeć pewne przybliżone liczby oparte na używanym procencie pamięci, aby ustalić, czy serwer jest mocno obciążony, ponieważ kiedyś stałem się tym, który scramował serwer, nie rozumiejąc bieżącego obciążenia.

Czy swap jest prawie tak samo jak pamięć? Na przykład, gdy pamięć i zamiana są prawie tego samego rozmiaru, jeśli pamięć prawie się kończy, ale zamiana jest nadal w dużej mierze wolna, czy mogę po prostu wyświetlić ją tak, jakby użyty procent pamięci + wymiany wciąż nie był wysoki i uruchomić inne nowe procesy?

Jak weźmiesz pod uwagę wykorzystanie procesora lub pamięci (lub pamięci + wymiany)? Czy martwisz się, jeśli któryś z nich osiągnie zbyt wysoką wartość lub jedno i drugie?

Wyjście z góry :

$ top

 
do góry - 12:45:33 do 19 dni, 23:11, 18 użytkowników, średnia ładowanie: 14.04, 14.02, 14.00
Zadania: łącznie 484, 12 uruchomionych, 472 śpiących, 0 zatrzymanych, 0 zombie
Cpu (s): 36,7% us, 19,7% sy, 0,0% ni, 43,6% id, 0,0% wa, 0,0% hi, 0,0% si, 0,0% st
Mem: 130766620k łącznie, 130161072k używane, 605548k wolne, 919300k buforów
Zamiana: łącznie 63111312 tys., Używane 500556 tys., 62610756 tys. Wolne, 124437752 tys

  PID USER PR NI VIRT RES SHR S% CPU% MEM TIME + COMMAND
 6529 sanchez 18 -2 1075m 219m 13m S 100 0,2 13760: 23 MATLAB
13210 tymotka 18 -2 48336 37m 1216 R 100 0,0 3: 56,75 absurdalność
13888 tymotka 18 -2 48336 37m 1204 R 100 0,0 2: 4,89 absurd
14542 tymotka 18 -2 48336 37m 1196 R 100 0,0 1: 08.34 absurd
14544 tymotka 18 -2 2888 2076 400 R 100 0,0 1: 06.14 gromadzić Dane
 6183 sanchez 18 -2 1133m 195m 13m S 100 0,2 13676: 04 MATLAB
 6795 sanchez 18 -2 1079m 210m 13m S 100 0,2 13734: 26 MATLAB
10178 tymotka 18 -2 48336 37m 1204 R 100 0,0 11: 33,93 absurd 
12438 tymotka 18 -2 48336 37m 1216 R 100 0,0 5: 38,17 absurd
13661 tymotka 18 -2 48336 37m 1216 R 100 0,0 2: 44,13 absurd
14098 tymotka 18 -2 48336 37m 1204 R 100 0,0 1: 58,31 absurd
14335 tymotka 18 -2 48336 37m 1196 R 100 0,0 1: 08.93 absurd
14765 tymotka 18 -2 48336 37m 1196 R 99 0,0 0: 32,57 absurd
13445 tymotka 18 -2 48336 37m 1216 R 99 0,0 3: 01,37 absurd
28990 root 20 0 0 0 0 S 2 0,0 65: 50,21 pdflush
12141 tim 18 -2 19380 1660 1024 R 1 0,0 0: 4,04 góra
 1240 korzeń 15 -5 0 0 0 S 0 0,0 16: 07.11 kjournald
 9019 root 20 0 296m 4460 2616 S 0 0,0 82: 19,51 kdm_greet
    1 korzeń 20 0 4028 728 592 S 0 0,0 0: 03.11 init
    2 root 15 -5 0 0 0 S 0 0,0 0: 00,00 kthreadd
    3 root RT -5 0 0 0 S 0 0,0 0: 01.01 migracja / 0
    4 root 15 -5 0 0 0 S 0 0,0 0: 08,13 ksoftirqd / 0
    5 root RT -5 0 0 0 S 0 0,0 0: 00.00 watchdog / 0
    6 korzeni RT -5 0 0 0 S 0 0,0 17: 27,31 migracja / 1
    7 korzeni 15 -5 0 0 0 S 0 0,0 0: 01,21 ksoftirqd / 1
    8 root RT -5 0 0 0 S 0 0,0 0: 00.00 watchdog / 1
    9 root RT -5 0 0 0 S 0 0,0 10: 02,56 migracja / 2
   10 root 15 -5 0 0 0 S 0 0,0 0: 00,34 ksoftirqd / 2
   11 root RT -5 0 0 0 S 0 0,0 0: 00.00 watchdog / 2
   12 korzeni RT -5 0 0 0 S 0 0,0 4: 29,53 migracja / 3
   13 root 15 -5 0 0 0 S 0 0,0 0: 00,34 ksoftirqd / 3
Tim
źródło
2
Zobacz to, aby uzyskać dobrą odpowiedź na temat pamięci. serverfault.com/questions/38065/#38074
Zoredache
I ta odpowiedź na szybkie podsumowanie średniej obciążenia (lub ten długi przeczytać szczegółowe informacje).
Nickolay

Odpowiedzi:

56

(1) Widzę, że każdy z uruchomionych procesów zajmuje bardzo mały procent pamięci (% MEM nie więcej niż 0,2%, a większość zaledwie 0,0%), ale jak prawie cała pamięć jest prawie używana, jak w czwartym wierszu wyniku ( „Mem: 130766620k łącznie, 130161072k używane, 605548k wolne, 919300k buforów”)? Suma wykorzystanego procentu pamięci we wszystkich procesach wydaje się mało prawdopodobna, aby osiągnąć prawie 100%, prawda?

Aby zobaczyć, ile pamięci aktualnie używasz, uruchom free -m. Zapewni dane wyjściowe takie jak:

             Łącznie wykorzystane wolne buforowane bufory współdzielone
Mem: 2012 1923 88 0 91 515
- / + bufory / pamięć podręczna: 1316 695
Zamień: 3153 256 2896

Wartość „użytego” górnego wiersza (1923) prawie zawsze będzie prawie równa wartości pamięci górnego wiersza (2012). Ponieważ Linux lubi używać dowolnej wolnej pamięci do buforowania bloków dysku (515).

Kluczową wartością użytą do sprawdzenia jest wartość użytego rzędu buforów / pamięci podręcznej (1316). Właśnie tyle miejsca zajmują obecnie Twoje aplikacje. Aby uzyskać najlepszą wydajność, liczba ta powinna być mniejsza niż całkowita pamięć (2012). Aby uniknąć błędów braku pamięci, musi być mniejsza niż całkowita pamięć (2012) i przestrzeń wymiany (3153).

Jeśli chcesz szybko sprawdzić, ile wolnej pamięci jest wolne, spójrz na wartość wolnej pamięci buforów / pamięci podręcznej (695). Jest to pamięć całkowita (2012) - faktycznie wykorzystana (1316). (2012 - 1316 = 696, a nie 695, będzie to po prostu problem z zaokrąglaniem)

(2) jak rozumieć średnią obciążenia w pierwszym wierszu („średnia obciążenia: 14.04, 14.02, 14.00”)?

Ten artykuł na temat średniego obciążenia używa ładnej analogii ruchu i jest najlepszy, jaki do tej pory znalazłem: Zrozumienie obciążenia procesora w systemie Linux - kiedy powinieneś się martwić? . W twoim przypadku, jak zauważyli ludzie:

W systemie wieloprocesorowym obciążenie jest zależne od liczby dostępnych rdzeni procesora. Znak „100% wykorzystania” wynosi 1,00 w systemie jednordzeniowym, 2,00 w dwurdzeniowym, 4,00 w czterordzeniowym itp.

Zatem przy średnim obciążeniu wynoszącym 14,00 i 24 rdzeniach serwer nie jest przeciążony.

Pascal Thivent
źródło
17

Systemy uniksowe, w tym linux, zostały zaprojektowane w celu jak najbardziej efektywnego wykorzystania dostępnej pamięci RAM. Mówiąc bardzo ogólnie, istnieją 3 stany, w których każdy MB pamięci RAM może znajdować się:

  1. Wolny
  2. Używany przez proces
  3. Używany do buforów

Trzeci stan jest wykorzystywany tylko jako przestrzeń do rysowania i ma być przeznaczony do ponownego przypisania, gdy zajdzie taka potrzeba, tj. Całkowita dostępna pamięć dla programów jest naprawdę wolna + używana dla buforów. W związku z tym tak naprawdę nie zobaczysz, że przydzielone miejsce w buforze jest wyświetlane jako przypisane do określonego procesu.

Twoje średnie pytanie obciążenia jest nieco bardziej interesujące, ponieważ można je łatwo zinterpretować. Pełna historia znajduje się w tym linuksowym artykule . Najlepszym podsumowaniem jest bezpośredni cytat z artykułu,

Obliczenie średniej obciążenia najlepiej jest traktować jako średnią ruchomą procesów w kolejce uruchomień Linuksa oznaczonych jako działające lub nieprzerywalne

Oznacza to, że średnią wartość obciążenia można traktować jako (liczbę uruchomionych procesów) + (liczbę procesów oczekujących na We / Wy). Pamiętając, że w danym momencie możesz mieć liczbę wykonanych procesów $ CORE, powiedziałbym, że twoje średnie obciążenie 14 jest dość niskie.

Scott Pack
źródło
Dzięki! Jaki procent wykorzystanej pamięci (lub pamięci + zamiany) jest uważany za mocno obciążony i lepiej nie uruchamiać nowych procesów? Czy patrzysz zarówno na pamięć, jak i na pamięć + zamianę? Czy zużyta zamiana jest pokazana w górnej części faktycznie wykorzystanej wielkości zamiany? Jeśli chodzi o średnie obciążenie procesora, czy mierzysz rzeczywiste obciążenie „średnią obciążeniem / liczbą rdzeni”? Ile by to kosztowało serwer, który jest mocno obciążony? Dziękuję i pozdrawiam!
Tim
2
Obciążenie to tylko wskaźnik. Zasadniczo ładunek większy niż rdzenie jest złą rzeczą. Zasadniczo wysoki procent używanej pamięci to zła rzecz. Nie jest to wartość binarna, którą można powiedzieć „tyle jest w porządku”. Jeśli zabraknie pamięci RAM, nie masz wystarczającej ilości, aby uruchomić więcej procesów. Jeśli nie zabraknie, masz mnóstwo. To bardzo zależy od specyfiki twojej sytuacji.
Cian
4

Ze strony podręcznika sar:

       Średnia obciążenia jest obliczana jako średnia liczba uruchamialnych lub 
       uruchomione zadania (stan R), a liczba zadań w sposób nieprzerwany
       uśpienie (stan D) przez określony czas.

Ze strony podręcznika uptime:

       Średnie obciążenie systemu to średnia liczba procesów
       w stanie wykonalnym lub nieprzerwanym. Proces w stanie wykonalnym
       używa procesora lub czeka na użycie procesora. Proces w
       stan przerywany czeka na pewien dostęp I / O, np. na dysk.
       Średnie są brane z trzech przedziałów czasowych. Załaduj średnie
       nie są znormalizowane dla liczby procesorów w systemie, więc obciążenie jest średnio
       wiek 1 oznacza, że ​​cały procesor jest ładowany cały czas, gdy jest ustawiony na 4
       System CPU oznacza, że ​​był bezczynny przez 75% czasu.
Dennis Williamson
źródło
3
  1. Linux od jakiegoś czasu zarządza pamięcią w taki sposób, że ta linia jest w topzasadzie bezużyteczna, generalnie utrzymując większość pamięci maszyny przydzielonej do różnych zastosowań, gdy nie jest to wymagane przez proces użytkownika.
  2. Średnia wartość obciążenia to średnia liczba procesów uruchomionych lub oczekujących na uruchomienie. Zwykle ma silną ujemną korelację z opóźnieniem / reaktywnością systemu, więc chcesz, aby była jak najniższa. Ponieważ jednak każdy z twoich procesorów może działać w danym momencie, wydaje się, że dobrze sobie radzisz w wieku 14 lat.
chaos
źródło
Dzięki! Jeśli chodzi o 1, czy masz na myśli, że niektóre procesy nie pojawiają się na górze, ale zużywają dużo pamięci? Albo że czwarty wiersz danych wyjściowych dotyczących pamięci („Mem: 130766620k łącznie, 130161072k używane, 605548k wolne, 919300k buforów”) jest mylący, powinienem spojrzeć na sumę procentu pamięci używanej przez wszystkie procesy pokazane na górze iw moim przypadku Czy mogę bezpiecznie uruchamiać nowe procesy zajmujące pamięć?
Tim
2
Jak wskazały inne odpowiedzi, średnie obciążenie należy porównać z liczbą procesorów, więc 14 nie jest aż tak duże w systemie 24-rdzeniowym. To byłoby trochę jak 14/24 = 0,58 w systemie jednordzeniowym (no cóż).
David Z
@Tim: Mam na myśli to drugie.
chaos