Jaka jest różnica między raportem użycia pamięci w Monitorze systemu a raportem za darmo?

14

Używam Monitora systemu 2.28.0. Kiedy patrzę na kartę Zasoby, widzę ładny wykres z pamięcią i zamianą. Pamięć wynosi około 60% 2,3 GiB z 3,8. Kiedy wpisuję polecenie za darmo, otrzymuję:

             total       used       free     shared    buffers     cached
Mem:       3994908    3962396      32512          0     100852    1477032
-/+ buffers/cache:    2384512    1610396
Swap:      8000328      28468    7971860

cat / proc / meminfo | grep MemFree dają

MemFree:           34536 kB

Sytuacja pozostawała bezpieczna przez kilka minut. Zacząłem wiele procesów od skryptu i skrypt czeka na obniżenie wolnej pamięci. Zgodnie z tym, co widzę na karcie Proces (lub u góry), liczba w Monitorze systemu wydaje się być bardzo zamknięta w stosunku do całkowitej pamięci procesu, którą zgłosił za darmo.

Dzięki

Guillaume Coté
źródło

Odpowiedzi:

15

Różnica polega na tym, czy pamięć „bufory” i „buforowane” są uwzględnione w liczbie „używanych”.

Zasadniczo jądro wykorzystuje pamięć systemową Linux do dwóch celów: procesów i pamięci podręcznej / buforów plików / sieci. Jeśli przyjrzysz się uważnie wynikowi free, jest on już pokazany:


             total       used       free     shared    buffers     cached
Mem:       3994908    3962396      32512          0     100852    1477032
-/+ buffers/cache:    2384512    1610396
Swap:      8000328      28468    7971860

Jeśli dodasz „bufory” i „pamięć podręczną”, a następnie odejmiesz to od kolumny „używane”, otrzymasz drugą linię pod „używane” (linia, która zaczyna się od -/+ buffers/cache), która pokazuje około 2,3G (2384512) w use, który odpowiada zgłoszonej pamięci używanej przez Monitor Systemu (ignoruje bufory / buforowane, ponieważ te odejdą, aby zrobić miejsce dla większej liczby procesów).

Twój grep przeciwko /proc/meminfofaktycznie pasuje do kolumny „wolnej” pierwszego wiersza (32512 jest wystarczająco blisko 34536 - prawdopodobnie zmienił się między dwoma wyjściami poleceń).

Kees Cook
źródło
Dzięki, zastanawiam się, dlaczego system potrzebował 1,5 GB pamięci podręcznej, ale to wyjaśnia.
Guillaume Coté
1
To mniej kwestia „potrzeby” niż „zużytej”. W tym momencie odczytał przynajmniej tyle z dysku twardego i zachował go w wolnej pamięci na wypadek, gdyby musiał go ponownie użyć.
Kees Cook
0

Kiedy dostałem rękę na monitorze systemu, użycie pamięci zgłoszone na karcie „Zasoby” było takie samo jak w freekolumnie w/usr/bin/free .

Problem polega na tym, że wolna pamięć fizyczna wynosi prawie 0, wkrótce lub później: Linux buforuje agresywnie, więc pieniądze wydane na zakup pamięci RAM są efektywnie wykorzystywane. A to oznaczało, że wykres stale pokazuje> 98% zużycia pamięci, co było bezużyteczne.

Więc ja / my postanowiliśmy zrobić tak jak -/+ buffers/cache:linia /usr/bin/free. W ten sposób wykres ma sens i pozwala użytkownikowi obserwować użycie pamięci ~ aplikacji / przestrzeni użytkownika zamiast stanu fizycznego pamięci.

Wiem, że jest to nieco mylące, ponieważ większość (1) użytkowników nie rozumie, że wolna pamięć fizyczna to strata pieniędzy i wydajności. W pracy napotkałem ten sam problem: w każdy poniedziałek serwery uruchamiały się ponownie, a w ciągu następnych 24 godzin każdy serwer uruchamiał alert „zapełnienie pamięci”. Więc miałem wolne obliczenia pamięci naprawione w oprogramowaniu nadzorującym, tak jak w systemie-monitorze.

Obecny system Solaris ma ten sam problem: pamięć podręczna ZFS (ARC) nie jest zawarta w wolnej pamięci zgłaszanej przez narzędzia takie, vmstatco sprawia, że ​​głupi administratorzy DB narzekają, że „ZFS jest zły” :)

Benoit
źródło