Wie wird der Arbeitsspeicher (RAM) mit dem Linux-Befehl verwendet?

30

Ich versuche, den verwendeten Speicher (RAM) in Prozent mithilfe von Linux-Befehlen abzurufen. Mein cpanel zeigt den verwendeten Speicher an, den ich auf einer bestimmten Webseite anzeigen muss.

In den Foren habe ich festgestellt, dass der richtige Speicher folgendermaßen ermittelt werden kann:

free -m

Ergebnis:

-/+ buffers/cache:        492       1555

- / + Puffer / Cache: Enthält die korrekte Speichernutzung. Ich weiß nicht, wie ich diese Informationen analysieren soll oder ob es einen anderen Befehl gibt, um den verwendeten Speicher in Prozent zu ermitteln.

Codelogn
quelle
3
Das wurde hier schon beantwortet! stackoverflow.com/questions/10585978/… eg: free | grep Mem | awk '{print $4/$2 * 100.0}'
szboardstretcher
@szboardstretcher Ich mag dieses:$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'
Simply_Me
Ohne zu wissen, wozu Sie die Nummer benötigen, ist es schwierig, Ihnen zu sagen, welche Nummer Sie verwenden sollten. In vielen Fällen ist jedoch jede dieser Zahlen nur sehr naiv und erfordert Trend- und Kontextinformationen.
Eckes

Antworten:

33

Hier ist eine Beispielausgabe von free:

% free
             total       used       free     shared    buffers     cached
Mem:      24683904   20746840    3937064     254920    1072508   13894892
-/+ buffers/cache:    5779440   18904464
Swap:      4194236        136    4194100

Die erste Zeile der Nummern ( Mem:) wird aufgelistet

  • total Erinnerung
  • used Erinnerung
  • free Erinnerung
  • Benutzung von shared
  • Benutzung von buffers
  • Nutzung Dateisystem Caches ( cached)

In dieser Zeile used sind die Puffer und der Cache enthalten und dies wirkt sich kostenlos aus. Dies ist nicht Ihr "wahrer" freier Speicher, da das System den Cache bei Bedarf entleert, um Zuordnungsanforderungen zu erfüllen.

Die nächste Zeile ( -/+ buffers/cache:) gibt den tatsächlich verwendeten und freien Speicher an, als ob es keine Puffer oder Cache gäbe.

Die letzte Zeile ( Swap) gibt die Verwendung des Auslagerungsspeichers an. Es gibt keinen Puffer oder Cache für den Austausch, da es nicht sinnvoll wäre, diese Dinge auf einer physischen Festplatte abzulegen.

Um den belegten Speicher (abzüglich Puffer und Cache) auszugeben, können Sie einen Befehl wie den folgenden verwenden:

% free | awk 'FNR == 3 {print $3/($3+$4)*100}'
23.8521

Dies greift nach der dritten Zeile und dividiert used / total * 100.

Und für freien Speicher:

% free | awk 'FNR == 3 {print $4/($3+$4)*100}' 
76.0657
casey
quelle
1
Ist "- / + Puffer / Cache: 5779440 18904464" die richtige RAM-Auslastung / der richtige Serverstatus?
Codelogn
2
Genau genommen nein, aber praktisch ja. Die tatsächliche Speichernutzung ist die 2. Zeile (verwendet: 20746840), ein Teil dieser Speichernutzung sind jedoch Puffer und Cache, um die Antwortzeiten auf Ihrem System zu beschleunigen. Die dritte Zeile (verwendet: 5779440) gibt an, wie viel Speicher von Programmen tatsächlich verwendet wird. Diese Speichergröße bestimmt, wie viel mehr Speicher Ihre Programme zuweisen können. Wenn es Ihr Ziel ist, freien / verwendeten Speicher zu erhalten, in dem Sinne, welche Programme tatsächlich verwendet werden und was Sie tatsächlich zuweisen können, dann ist Zeile 3 für Sie richtig.
Casey
1
Beachten Sie, dass bei neueren Versionen von " free," -/+ buffers/cacheabsichtlich komplett weggelassen wird und der in der usedSpalte angezeigte Wert jetzt standardmäßig die Puffer und den Cache ausschließt. Siehe hier: bugzilla.redhat.com/show_bug.cgi?id=1158828
jdgregson
10

Ich werde erwähnen, wie die Informationen auf freeBefehl zu analysieren sind . Um den Prozentsatz zu finden, können Sie wie in den anderen 2 Antworten vorgeschlagen verwenden.

Dies wird deutlich erklärt hier . Ich würde versuchen zu erklären, was ich in meinem System habe.

free -m
             total       used       free     shared    buffers     cached
Mem:          7869       4402       3466          0        208       3497
-/+ buffers/cache:        696       7173
Swap:         3999        216       3783

Lassen Sie uns nun sehen, was die verschiedenen Zahlen tatsächlich bedeuten.

Linie 1

  • 7869 Zeigt an, dass Speicher / physischer RAM für meinen Computer verfügbar ist.
  • 4402 Zeigt den von meinem System verwendeten Speicher / RAM an.
  • 3466 Zeigt an, dass der gesamte Arbeitsspeicher frei und für die Ausführung eines neuen Prozesses verfügbar ist.
  • 0 Zeigt den gemeinsam genutzten Speicher an. Diese Spalte ist veraltet und wird möglicherweise in zukünftigen Versionen von free entfernt.
  • 208 Zeigt den gesamten RAM an, der von verschiedenen Anwendungen in Linux gepuffert wurde.
  • 3497 Gibt den gesamten Arbeitsspeicher an, der für das Zwischenspeichern von Daten für zukünftige Zwecke verwendet wird.

Zeile 2

-/+ buffers/cache:        696       7173

Wie berechnet man die in Zeile 2 erhaltenen Werte 696 und 7173?

Total used ( 4402 ) - Gesamtpuffer-RAM ( 208 ) - Der Gesamt-RAM zum Zwischenspeichern ( 3497 ) sollte den tatsächlich verwendeten RAM im System darstellen. Es gibt mir 697 zurück, was die tatsächlich verwendete RAM- Ausgabe in der zweiten Zeile ist.

Nun Total Available ( 7869 ) - Tatsächliche Gebraucht ( 696 ) sollen Ihnen die gibt freie Speicher , das ist 7173 in diesem Fall , das auch als Ausgang in der zweiten Zeile bekommt ist.

Ramesh
quelle
6

Obwohl es sich um ein Duplikat handelt , auf das @szboardstretcher hinweist, ist meine Präferenz für die Lösungen (in der ursprünglichen Frage) die folgende, insbesondere, da Sie eine Analyse auf einer Webseite durchführen möchten.

$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'

Ausgabe:

used: 82.68%, buffers: 42.81%, swap: 1.27%
Einfach ich
quelle
4
Zu used: 96.00%, buffers: 26.53%awk: (FILENAME=- FNR=4) fatal: division by zero attempted
Ihrer Information:
Was ist der vollständige Befehl verwendet? Ich habe es in Centos überprüft.
Simply_Me
Entschuldigung für die Formatierung, aber hier geht's los$ cat /etc/issue CentOS release 6.7 (Final) $ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}' used: 12.91%, buffers: 96.24%awk: (FILENAME=- FNR=4) fatal: division by zero attempted $ free total used free shared buffers cached Mem: 15429704 1991416 13438288 164 151556 1259584 -/+ buffers/cache: 580276 14849428 Swap: 0 0 0
kellyfj
Bei einigen Versionen von awk (mawk) muss das Prozentzeichen verdoppelt werden, damit es gedruckt werden kann. Andernfalls gibt awk einen Fehler aus, der wie folgt lautet: printf ("used:% .0f %%"), $ 3 / $ 2 * 100 Dies funktioniert mit sowohl mawk als auch gawk.
Ján Lalinský
2
free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%\n"), $3/$2*100}' 

Fügt nach der Auslagerungsnummer eine neue Zeile ein

Andy
quelle
1

Für bis zu CentOS 7 können Sie es versuchen

cat /proc/meminfo 

um die tatsächliche Nutzung des Speichers durch Prozesse zu sehen.

Cosmo Arun
quelle