Frage Wie interpretiere ich die Ausgabe von Linux 'top' Befehl?


Nach einer Diskussion gemacht HIER wie PHP-FPM Speicher zu verbrauchen, habe ich gerade ein Problem beim Einlesen des Speichers gefunden top Befehl. Hier ist ein Screenshot von meinem top kurz nach dem Neustart PHP-FPM. Alles ist normal: etwa 20 PHP-FPM Prozesse, von denen jeder 5,5 MB Speicher verbraucht (0,3% der Gesamtmenge).

enter image description here

Hier ist der alte Server kurz vor dem Neustart von PHP-FPM (einen Tag nach dem vorherigen Neustart). Hier haben wir noch ungefähr 25 PHP-FPM mit doppelter Speicherbelegung (10MB, was 0,5% des Gesamtwerts bedeutet). Daher sollte der gesamte Speicher 600-700 MB betragen. Warum wurde dann 1,6 GB Speicher verwendet?

enter image description here


24
2018-04-08 02:22


Ursprung


Keine Panik! Dein Widder ist in Ordnung! - ephemient
@ephemient nein, das ist hier nicht der Fall. Ich habe all diese Sachen überprüft. Dies ist etwas, das mit PHP-FPM verbunden ist, und der Speicher wird freigegeben, indem nur PHP-FPM neu gestartet wird. Wie auch immer, die Werte von Mem und Puffer / Cache in free sind identisch. - Googlebot
Sieht so aus, als ob du eine Virtuozzo "VM" betreibst. Alle Wetten sind aus, soweit die Speicherabrechnung diese Dinge betrifft. - womble♦
stackoverflow.com/questions/131303/ ... - Stone
Lieber Womble und Ephemient: Ich habe beide deine Antworten gestohlen! gackert - Wesley


Antworten:


TL; DR 1

Ihr Server befindet sich in einer Art virtuozzo / openvz /Virtualisierung-du-jour Container. Der Versuch, einen Sinn für die Speichernutzung zu bekommen, ist das Kippen von Windmühlen.

TL; DR 2

Linux hat deinen RAM gefressen! Aber das ist okay, es macht es jedem.


Die lange Geschichte

Lass es uns kaputt machen!

In dem Mem: Abschnitt, den wir haben:

  • $n total: Die Menge an physischem RAM in Ihrer Maschine
  • $n used: Wie viel Speicher wird von Linux verbraucht, nicht nur die Summe der Prozesse.
  • $n free: Wie viel RAM wird nicht von Linux verbraucht? Dies berücksichtigt nicht, dass zwischengespeicherter und gepufferter Speicher im Wesentlichen "frei" ist.
  • $n buffers: Zwischenspeicherplatz ist, wo Blöcke von Datenträger-E / A gelesen oder ausstehende Schreibvorgänge gespeichert wurden. Ein Puffer ist eine RAM-Darstellung eines einzelnen Plattenblocks.

In dem Swap: Abschnitt, den wir haben:

  • $n total: Selbsterklärend. Verfügbarer Speicherplatz für Seiten zum Austauschen von Seiten.
  • $n used: Selbsterklärend. Wie viel Plattenauslagerungsbereich wird verwendet?
  • $n free: Ich Idiot.
  • $n cache: Eng verwandt mit obigen Puffern. Es ist tatsächlich Teil des Seitencaches und hat keinen Speicherplatz auf dem physischen Datenträger. Mach dir keine Sorgen über die Details für dieses Gespräch.

Der interessante Teil kommt, wenn Sie laufen free -m. Sie sehen drei Linien, und alle Zahlen werden mit oben korrelieren. Ich gebe meinen eigenen PC als Beispiel:

             total       used       free     shared    buffers     cached
Mem:          8070       7747        323          0        253       5713
-/+ buffers/cache:       1780       6290
Swap:         5055          0       5055

Die Mem-Zeile zeigt den Gesamt-RAM in Megabyte ($n total oben), wie viel wird verwendet ($n usedoben), wie viel ist frei ($n free oben), wie viel ist geteilt (ignorieren Sie das), und jetzt kommt der gute Teil! Das buffers und cached Spalten in free -m korrelieren vorhersehbar, $n buffers und $n cache. Aber sieh dir die zweite Reihe an free -m das beginnt mit -/+ buffers/cache:. Die Mathematik zeigt, dass die verwendete Menge tatsächlich (total) - ((used-buffers) -cached) ist. Kostenlos ist (total) - (theNewUsed).

Was bedeutet das alles? Es bedeutet das Linux hat deinen RAM gefressen! Die kurze Geschichte ist, dass der Linux-Kernel den RAM verschlingt, da er für das Disk-Caching zur Verfügung steht. Sie können nichts dagegen tun, es sei denn, Sie möchten einen benutzerdefinierten Kernel kompilieren. Profi-Tipp: Nicht.

Der RAM ist wirklich da und frei für Prozesse, die sie nach Belieben nutzen können. Das ist gemeint mit dem -/+ buffers/cache: einreihen free -m. Sie befinden sich jedoch in einem Hypervisor-Virtualisierungscontainer, der die Dinge ein wenig skurril macht. Sie können Ihren Speicher zu diesem Zeitpunkt einfach nicht mit Byte-Genauigkeit erfassen. Sie sehen jedoch kein Verhalten, das fürchterlich ungewöhnlich ist.

Bleib ruhig und mach weiter. Beziehen Sie auch einen physischen Server (es sei denn, Sie möchten Speicherstatistiken, die aussehen wie Kreskin, ist Ihr SysAdmin).


31
2018-04-14 06:07



Wird nicht verwendet Menge ist ((verwendet-Puffer) -cached)? - mac


Top ist nicht die beste Möglichkeit, die Speichernutzung zu überprüfen. Jedoch seit meine Frage wurde als ein Duplikat dieser Frage markiert, ich werde hier meine Entschließung posten.

Ich lese auf a Forum Das ps_mem.py überprüft die Speichernutzung für Sie.

Repository: https://github.com/pixelb/ps_mem/

Herunterladen:

pip install ps_mem

Verwendungszweck:

ps_mem

Ausgabe:

# ps_mem
 Private  +   Shared  =  RAM used   Program

  4.0 KiB +  15.5 KiB =  19.5 KiB   udevd
  4.0 KiB +  16.0 KiB =  20.0 KiB   mysqld_safe
  4.0 KiB +  25.5 KiB =  29.5 KiB   dbus-daemon
  4.0 KiB +  27.5 KiB =  31.5 KiB   xinetd
 60.0 KiB +  14.5 KiB =  74.5 KiB   epmd
108.0 KiB +  23.0 KiB = 131.0 KiB   init
  8.0 KiB + 135.0 KiB = 143.0 KiB   saslauthd (2)
180.0 KiB +  34.0 KiB = 214.0 KiB   check_scripts.s
796.0 KiB +  41.0 KiB = 837.0 KiB   bash
528.0 KiB + 359.0 KiB = 887.0 KiB   crond (7)
  1.2 MiB + 218.0 KiB =   1.4 MiB   sshd (2)
  1.6 MiB +  45.0 KiB =   1.6 MiB   rsyslogd
  2.0 MiB + 133.0 KiB =   2.1 MiB   beam.smp
  1.3 MiB +   2.3 MiB =   3.6 MiB   httpd (8)
 12.8 MiB + 956.0 KiB =  13.8 MiB   sendmail.sendmail (7)
 53.5 MiB + 114.0 KiB =  53.7 MiB   mysqld
317.6 MiB +   2.3 MiB = 320.0 MiB   python (6)
---------------------------------
                        398.5 MiB
=================================

0
2017-11-24 13:49