Po przeprowadzeniu badań wciąż nie rozumiem, jak monitorować użycie pamięci RAM

10

Przejrzałem ten artykuł , który wyjaśnia różne metody sprawdzania zużycia pamięci RAM. Nie mogę jednak pogodzić różnych metod i nie wiem, która z nich jest poprawna.

Podczas pierwszego logowania pojawia się następujący ekran:

  System information as of Sun Apr 28 21:46:58 UTC 2013

  System load:  0.0               Processes:           76
  Usage of /:   15.6% of 7.87GB   Users logged in:     1
  Memory usage: 41%               IP address for eth0: 
  Swap usage:   0%

To sugeruje mi, że używam 41% mojej pamięci RAM, co wydaje się dość wysokie, ponieważ serwer niewiele robi. Czy ta liczba odnosi się do czegoś poza pamięcią RAM?

Następnie wypróbowuję free -mmetodę:

ubuntu@ip-:~$ free -m
             total       used       free     shared    buffers     cached
Mem:           590        513         76          0         67        315
-/+ buffers/cache:        130        459
Swap:            0          0          0

Zgodnie z objaśniającą grafiką w artykule oznacza to, że mam 130 MB zużytej pamięci RAM i 459 MB wolnej pamięci RAM, co sugeruje, że używam około 22% mojej pamięci RAM.

Następnie uruchamiam top:

top - 22:14:48 up 195 days, 21:30,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.3%us,  0.3%sy,  0.0%ni, 97.7%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    604376k total,   525692k used,    78684k free,    69124k buffers
Swap:        0k total,        0k used,        0k free,   322740k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
    1 root      20   0 24332 1864  976 S  0.0  0.3   0:08.75 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd     

Jest to najbardziej mylące, ponieważ podsumowanie pokazuje, że używam 525MG o łącznej wartości 604M, a jednak kiedy używa się interaktywnego polecenia „m” do sortowania według najwyższej pamięci, najwyższy proces zajmuje tylko 0,3% pamięci ???

Wreszcie pspolecenie wydaje się również wykazywać bardzo małe zużycie pamięci:

root@ip-:/home/ubuntu# ps -o command,rss
COMMAND                       RSS
ps -o command,rss             788
sudo su root                 1764
su root                      1404
bash                         2132

Chciałbym, aby ktoś poprawił wszelkie nieporozumienia, które wywołują te pozorne konflikty.

Dzięki!

EDYCJA dla Rahula

Ouput z cat /proc/meminfo:

MemTotal:         604376 kB
MemFree:          157564 kB
Buffers:           49640 kB
Cached:           231376 kB
SwapCached:            0 kB
Active:           290040 kB
Inactive:          97772 kB
Active(anon):     107672 kB
Inactive(anon):     4844 kB
Active(file):     182368 kB
Inactive(file):    92928 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                52 kB
Writeback:             0 kB
AnonPages:        106836 kB
Mapped:            22920 kB
Shmem:              5712 kB
Slab:              42032 kB
SReclaimable:      34016 kB
SUnreclaim:         8016 kB
KernelStack:         688 kB
PageTables:         3584 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      302188 kB
Committed_AS:     242768 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7152 kB
VmallocChunk:   34359729008 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB
Jonasz
źródło
# 1) Polecenie w górę, aby posortować według pamięci nie jest m , to M . # 2) Aby zobaczyć wszystkie procesy, wypróbuj polecenie ** ps ax -o, rss **; to, co prowadziłeś, pokazuje tylko twoje.
zadzwonić
Zaktualizuj również dane wyjściowecat /proc/meminfo
Rahul Patil
5
linuxatemyram.com
Michael Hampton
@ tink, dzięki za wyjaśnienie. Próbowałem ps ax -o rss | awk '{ sum+=$1} END {print sum}'właśnie teraz i 153156.
Jonah
@RahulPatil, OP zaktualizowane. Zauważ, że uruchomione procesy mogą nieznacznie różnić się od pierwotnych liczb, ale nie powinny być tak daleko. Poza tym wynik, który dla ciebie uzyskałem, wydaje się nie zgadzać z wynikiem, który dostałem w komentarzu powyżej. Zostały one zrobione w odległości zaledwie kilku minut.
Jonasz

Odpowiedzi:

8

Musisz tylko zrozumieć Memory Concept

Zgodnie z danymi wyjściowymi / proc / meminfo, musisz tylko zauważyć poniższe rzeczy:

Bufory : - Bufor to coś, co nie zostało jeszcze „zapisane” na dysk. Reprezentuje ile pamięci RAM jest przeznaczone na blok dysku pamięci podręcznej. „Buforowane” jest podobne do „Buforów”, tylko tym razem buforuje strony z odczytu plików

Pamięć podręczna : pamięć podręczna to coś, co zostało „odczytane” z dysku i zapisane do późniejszego wykorzystania. Zasadniczo obszar pamięci podręcznej można traktować jako kolejną „wolną” pamięć RAM, ponieważ będzie ona stopniowo zmniejszana, jeśli aplikacja będzie wymagać więcej pamięci.

Wystarczy zrozumieć, że zarówno „bufory”, jak i „buforowane” reprezentują rozmiar pamięci podręcznej systemu. Dynamicznie rosną lub kurczą się zgodnie z wewnętrznym mechanizmem jądra systemu Linux.

na Webhostingu usuwają pamięć podręczną, używając poniższego cmd: (najczęściej skonfigurowane w cron):

sync && echo 3 > /proc/sys/vm/drop_caches

Cytuj link

EDYCJA dla jeszcze jednego wymagania, tj. Na użycie pamięci użytkownika

#!/bin/bash
total_mem=0

printf "%-10s%-10s\n" User MemUsage

while read u m
do
        [[ $old_user != $u ]] && { printf "%-10s%-0.1f\n" $old_user $total_mem; total_mem=0; }
        total_mem=$(echo $m + $total_mem | bc);
        old_user=$u

done < <(ps --no-headers -eo user,%mem| sort -k1)

#--EOF

Sprawdź powyższy skrypt i daj mi znać, czy pokazuje się poprawnie, czy nie.

Rahul Patil
źródło
Dzięki Rahul. Jedno ostatnie pytanie. Ponieważ free -mnie zapewnia sposobu przeglądania pamięci używanej przez użytkownika, jaki jest dokładny sposób ustalenia, ile rzeczywistej pamięci RAM zużywa dany użytkownik? Pojawia się to na przykład podczas monitorowania zużycia pamięci przez serwer współdzielony.
Jonasz
@Jonah Zaktualizowałem .. proszę sprawdź i daj mi znać
Rahul Patil
ten skrypt nie działa zgodnie z oczekiwaniami .. ale próbuję zaktualizować wkrótce
Rahul Patil
@Jonah dzięki za zaakceptowanie mojego ans .. ale prawdziwe podziękowania dla Michaela Hamptona ...
Rahul Patil
2

Dobra odpowiedź @RahulPatil.

Kolejny punkt do rozważenia na temat ps lub top jest następujący

To narzędzie [exmap] jest dokładniejsze niż ps lub top, ponieważ uwzględnia biblioteki współdzielone używane przez wiele aplikacji. Na przykład, jeśli dwie aplikacje korzystają z tej samej biblioteki współużytkowanej, która zajmuje 1 MB pamięci, ps wyświetli obie aplikacje wykorzystujące 1 MB dodatkowej pamięci, podczas gdy exmap bardziej poprawnie pokazuje każdą aplikację przy użyciu 500 KB. Ta większa dokładność jest szczególnie ważna przy ocenie środowisk graficznych, takich jak KDE i GNOME, które bardzo intensywnie korzystają z bibliotek współdzielonych przez aplikacje.

Przez ibm / developerworks / linux_memory

Ponieważ twoje pytanie dotyczy bezgłowego serwera - nie jestem pewien, ile faktycznie będzie miało podwójne zgłoszenie top lub ps.

Yeow_Meng
źródło
0

Obawiam się, że możemy przeoczyć to, co oczywiste, ponieważ dla większości z nas jest to „oczywiście”.

Jonah, wybacz mi, jeśli się mylę, ale twoje pytania brzmią tak, jakbyś nie zdawał sobie sprawy, że wszystkie te wartości, w szczególności użycie procesora, zwykle różnią się znacznie z sekundy na sekundę.

Zużycie procesora może wzrosnąć z pojedynczych cyfr do 100% natychmiast po rozpoczęciu nowego procesu, ale szybko (miejmy nadzieję) wróci do zakresu poniżej 50%.

Zużycie pamięci zmienia się wolniej, ale tam Linux próbuje użyć pamięci, która nie jest aktywnie używana, uruchamiając procesy „buforowania” dostępu do dysku. Na przykład próbuje przewidzieć, co będzie musiało zostać odczytane z dysku, na przykład resztę dużego pliku po odczytaniu części, i wstępnie załadować go do pamięci podręcznej. Niektóre wartości wykorzystania pamięci obejmują zarówno pamięć używaną przez procesy, jak i pamięć używaną do buforowania. W systemie, który działał przez jakiś czas, dwa połączone prawdopodobnie będą wynosić 80-90% lub więcej.

Weź również pod uwagę, że proces uruchamiany w celu pokazania użycia, na przykład top, również wykorzystuje procesor i pamięć. Jeśli napisałeś skrypt z pętlą do ciągłego raportowania użycia procesora, prawie na pewno zawsze pokazywałby 100%, ponieważ samo zgłoszenie użycia (bez pewnych sleep opóźnień) zużywa cały procesor.

DocSalvager
źródło
Doktorze, dzięki za myśl, ale nie o to chodziło
Jonasz