Wie interpretiere ich die Ausgabe des Linux-Befehls 'top'?

27

Nach einer Diskussion, die HIER darüber geführt hat, wie PHP-FPMviel Speicher verbraucht wird, habe ich gerade ein Problem beim Lesen des befehlsspezifischen Speichers festgestellt top. Hier ist ein Screenshot von meinem topkurz nach dem Neustart PHP-FPM. Alles ist normal: Etwa 20 PHP-FPMProzesse verbrauchen jeweils 5,5 MB Speicher (0,3% der Gesamtmenge).

Bildbeschreibung hier eingeben

Hier ist der gealterte Server kurz vor dem Neustart PHP-FPM(einen Tag nach dem vorherigen Neustart). Hier haben wir noch etwa 25 PHP-FPMmit doppelter Speicherauslastung (10 MB, was 0,5% der Gesamtauslastung entspricht). Daher sollte der Gesamtspeicher 600-700 MB betragen. Warum wurde dann 1,6 GB Speicher verwendet?

Bildbeschreibung hier eingeben

Googlebot
quelle
@ephemient nein das ist hier nicht der fall. Ich habe all diese Sachen überprüft. Dies hängt mit PHP-FPM zusammen und der Speicher wird freigegeben, wenn Sie PHP-FPM neu starten. Auf jeden Fall sind die Werte von Mem und buffer / cache in freeidentisch.
Googlebot
6
Sieht aus wie Sie eine Virtuozzo "VM" ausführen. Alle Wetten sind ungültig, was die Speicherabrechnung anbelangt.
womble
Lieber womble und ephemient: Ich habe beide Antworten gestohlen! Gackern
Wesley

Antworten:

34

TL, DR 1

Ihr Server befindet sich in einer Art virtuozzo / openvz / virtualization-du-jour- Container. Der Versuch, die Speichernutzung zu verstehen, führt dazu, dass die Windmühlen kippen.

TL, DR 2

Linux hat Ihren Arbeitsspeicher aufgefressen! Aber das ist okay, es tut es allen an.


Die lange Geschichte

Lassen Sie es uns brechen!

In der Mem:Sektion haben wir:

  • $n total: Die Größe des physischen Arbeitsspeichers in Ihrem Computer
  • $n used: wie viel Speicher wird von Linux verbraucht, nicht nur die Summe der Prozesse.
  • $n free: Wie viel RAM wird von Linux nicht verbraucht. Dies berücksichtigt nicht, dass zwischengespeicherter und gepufferter Speicher im Wesentlichen "frei" ist.
  • $n buffers: In diesem Puffer werden Blöcke der Festplatten-E / A gespeichert, die gelesen wurden oder auf die ein Schreibvorgang wartet. Ein Puffer ist eine RAM-Darstellung eines einzelnen Plattenblocks.

In der Swap:Sektion haben wir:

  • $n total: Selbsterklärend. Menge des verfügbaren Speicherplatzes zum Auslagern von Seiten.
  • $n used: Selbsterklärend. Wie viel Speicherplatz für den Plattenaustausch verwendet wird.
  • $n free: Ich Idiot.
  • $n cache: In enger Beziehung zu den oben genannten Puffern. Es ist tatsächlich Teil des Seiten-Cache und hat selbst keinen Platz auf der physischen Festplatte. Mach dir keine Sorgen über die Details für dieses Gespräch.

Der interessante Teil kommt, wenn Sie laufen free -m. Sie sehen drei Zeilen, und alle Zahlen entsprechen der oberen Zeile. Ich werde meinen eigenen PC als Beispiel geben:

             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 gesamten RAM in Megabyte ( $n totaloben), wie viel ( $n usedoben) verwendet wird, wie viel frei ( $n freeoben) ist, wie viel geteilt wird (ignoriere das) und jetzt kommt der gute Teil! Die Spalten buffersund cachedin free -mkorrelieren vorhersehbar mit $n buffersund $n cache. Aber werfen Sie einen Blick auf die zweite Reihe, mit der free -mdas beginnt -/+ buffers/cache:. Die Mathematik zeigt, dass die verwendete Menge wirklich (total) - ((used-puffer) -cached ist. Kostenlos ist (total) - (theNewUsed).

Was bedeutet das alles? Es bedeutet, dass Linux Ihren RAM gefressen hat! Die kurze Geschichte ist, dass der Linux-Kernel den Arbeitsspeicher verschlingt, da er für das Zwischenspeichern von Festplatten zur Verfügung steht. Sie können nichts dagegen tun, wenn Sie nicht Lust haben, einen benutzerdefinierten Kernel zu kompilieren. Profi-Tipp: Nicht.

Der Arbeitsspeicher ist wirklich vorhanden und kann von den Prozessen nach Belieben genutzt werden. Das ist es, was mit der -/+ buffers/cache:Reihe in gemeint ist free -m. Sie befinden sich jedoch in einem Virtualisierungscontainer ohne Hyper-Visor, der die Dinge etwas unruhig macht. Sie können zu diesem Zeitpunkt einfach keine bytegenaue Bestandsaufnahme Ihres Speichers durchführen. Sie sehen jedoch kein schrecklich ungewöhnliches Verhalten.

Bleib ruhig und mach weiter. Besorgen Sie sich auch einen physischen Server (es sei denn, Sie möchten Speicherstatistiken, die so aussehen, als wäre Kreskin Ihr SysAdmin).

Wesley
quelle
Ist nicht verbrauchte Menge ((used-puffer) -cached)?
Mac
1

Top ist nicht der beste Weg, um die Speichernutzung zu überprüfen. Da meine Frage jedoch als Duplikat dieser Frage markiert wurde, werde ich meine Entschließung hier veröffentlichen.

Ich habe in einem Forum gelesen , dass ps_mem.py die Speichernutzung für Sie überprüft.

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

Herunterladen:

pip install ps_mem

Verwendung:

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
=================================
Benutzer
quelle