it-swarm.com.de

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

Nach einer Diskussion HIER darüber, wie PHP-FPM Speicher verbrauchend, ich habe gerade ein Problem beim Lesen des Speichers im Befehl top gefunden. Hier ist ein Screenshot von meinem top kurz nach dem Neustart von PHP-FPM. Alles ist normal: ungefähr 20 PHP-FPM Prozesse, die jeweils 5,5 MB Speicher belegen (0,3% der Gesamtmenge).

enter image description here

Hier ist der veraltete 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 Speichernutzung (10 MB, was 0,5% der Gesamtmenge entspricht). Daher sollte der insgesamt verwendete Speicher 600-700 MB betragen. Warum wurden dann 1,6 GB Speicher verwendet?

enter image description here

27
Googlebot

TL; DR 1

Ihr Server befindet sich in einer Art virtuozzo/openvz/ Virtualization-du-Jour-Container . Der Versuch, die Speichernutzung zu verstehen, neigt sich zu Windmühlen.

TL; DR 2

Linux hat Ihren RAM gefressen! Aber das ist okay, es tut es allen.


Die lange Geschichte

Lass es uns zusammenfassen!

Im Abschnitt Mem: Haben wir:

  • $n total: Die Menge an physischem RAM in Ihrem Computer
  • $n used: Wie viel Speicher von Linux verbraucht wird, nicht nur die Summe der Prozesse.
  • $n free: Wie viel RAM wird von Linux nicht verbraucht. Dies berücksichtigt nicht, dass der zwischengespeicherte und gepufferte Speicher im Wesentlichen "frei" ist.
  • $n buffers: Im Pufferbereich werden Blöcke von Festplatten-E/A gespeichert, die gelesen wurden oder auf die ein Schreibvorgang wartet. Ein Puffer ist eine RAM Darstellung eines einzelnen Plattenblocks.

Im Abschnitt Swap: Haben wir:

  • $n total: Selbsterklärend. Größe des verfügbaren Speicherplatzes zum Wechseln von Seiten.
  • $n used: Selbsterklärend. Wie viel Speicherplatz wird verwendet?.
  • $n free: Herp Derp.
  • $n cache: Eng verwandt mit den oben genannten Puffern. Es ist tatsächlich Teil des Seitencaches und hat selbst keinen Speicherplatz auf der physischen Festplatte. Mach dir keine Sorgen über die Details für dieses Gespräch.

Der interessante Teil kommt, wenn Sie free -m Ausführen. Sie sehen drei Zeilen und alle Zahlen korrelieren mit oben. 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 die Gesamtzahl RAM in Megabyte ($n total Oben), wie viel verwendet wird ($n used Oben), wie viel frei ist ($n free In) oben), wie viel geteilt wird (ignoriere das), und jetzt kommt der gute Teil! Die Spalten buffers und cached in free -m Korrelieren vorhersehbar mit $n buffers Und $n cache. Aber schauen Sie sich die zweite Zeile von free -m An, die mit -/+ buffers/cache: Beginnt. Die Mathematik zeigt, dass die verwendete Menge wirklich (insgesamt) - ((gebrauchte Puffer) zwischengespeichert) ist. Kostenlos ist (total) - (theNewUsed).

Was bedeutet das alles? Dies bedeutet, dass Linux Ihren RAM gefressen hat! Die Kurzgeschichte ist, dass der Linux-Kernel RAM, wie es für das Festplatten-Caching verfügbar ist. Sie können nichts dagegen tun, es sei denn, Sie möchten einen benutzerdefinierten Kernel kompilieren. Pro Tipp: Nicht.

Das RAM ist wirklich da und kann von Prozessen nach Belieben verwendet werden. Das ist es, was mit der Zeile -/+ buffers/cache: In free -m Gemeint ist. Sie befinden sich jedoch in einem Nicht-Hypervisor-Virtualisierungscontainer, wodurch die Dinge etwas unruhig werden. Sie können zu diesem Zeitpunkt einfach keine Bestandsaufnahme Ihres Speichers mit Byte-Genauigkeit durchführen. Sie sehen jedoch kein Verhalten, das fürchterlich ungewöhnlich ist.

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

34
Wesley

Top ist nicht der beste Weg, um die Speichernutzung zu überprüfen. Da jedoch meine Frage 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

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
=================================
1
User