Ich schreibe ein Shell-Skript, um den gesamten physischen Speicher in einigen RHEL-Linux-Boxen herauszufinden.
Zunächst möchte ich betonen, dass mich der gesamte vom Kernel erkannte physische Speicher interessiert , nicht nur der verfügbare Speicher . Daher bitte, was darauf hindeutet , vermeiden Antworten zu lesen / proc / meminfo oder zu verwenden , frei , oben oder sar Befehle - In allen diesen Fällen ihre „ Gesamtspeicher “ Werte „bedeuten verfügbare Speicher “ sind.
Der erste Gedanke war, die Boot-Kernel-Nachrichten zu lesen:
Memory: 61861540k/63438844k available (2577k kernel code, 1042516k reserved, 1305k data, 212k init)
In einigen Linux-Boxen ist diese nützliche Boot-Kernel-Nachricht jedoch aufgrund der Verwendung der PowerPath-Software von EMC2 und ihrer überfluteten Startmeldungen beim Kernel-Start nicht verfügbar, auch nicht in der Datei / var / log / dmesg .
Die zweite Option war der Befehl dmidecode (ich werde vor der möglichen Nichtübereinstimmung von Kernel-erkanntem RAM und echtem RAM aufgrund der Einschränkungen einiger älterer Kernel und Architekturen gewarnt). Die Option --memory vereinfacht das Skript, aber ich habe festgestellt, dass ältere Versionen dieses Befehls keine Option --memory haben .
Meine letzte Chance war der Befehl getconf . Es gibt die Größe der Speicherseite an, jedoch nicht die Gesamtzahl der physischen Seiten. Die Systemvariable _PHYS_PAGES scheint die verfügbaren physischen Seiten zu sein, nicht die Gesamtzahl der physischen Seiten.
# getconf -a | grep SEITEN SEITENGRÖSSE 4096 _AVPHYS_PAGES 1049978 _PHYS_PAGES 15466409
Meine Frage: Gibt es eine andere Möglichkeit, die Gesamtmenge des physischen Speichers abzurufen, die von einem Shell-Skript analysiert werden kann?
quelle
Antworten:
Wenn Sie am physischen RAM interessiert sind, verwenden Sie den Befehl
dmidecode
. Sie erhalten viel mehr Informationen als nur das. Abhängig von Ihrem Anwendungsfall möchten Sie möglicherweise auch wissen, ob die 8G im System von 2x4 GB-Sticks oder 4x2 GB-Sticks stammen.quelle
Hast du es versucht
cat /proc/meminfo
? Sie können dann awk oder grep out, was Sie wollen, MemTotal zBoder
quelle
awk '/MemTotal/ {print $2}' /proc/meminfo
Je weniger Rohre desto besser.grep -oP '^MemTotal:\s+\K.*' /proc/meminfo
awk
ist von POSIX standardisiert, hat abergrep
Optionen-o
und ist-P
es nicht! Ihr Beispiel funktioniert gut mit GNUgrep
(aber GNU sagt immer noch, dass die PCRE-Implementierung experimentell ist), aber es wird wahrscheinlich nicht mit anderen Implementierungen funktionieren.cat /proc/meminfo | grep MemTotal
oder kostenlos gibt Ihnen die genaue Menge an RAM, die Ihr Server hat. Dies ist kein "verfügbarer Speicher".Ich denke, Ihr Problem tritt auf, wenn Sie eine VM haben und die gesamte vom Hypervisor gehostete Speichermenge berechnen möchten. In diesem Fall müssen Sie sich jedoch beim Hypervisor anmelden.
ist äquivalent zu
quelle
cat /proc/meminfo | grep MemTotal
berichtetMemTotal: 3957032 kB
, das ist ein bisschen kurz von 4 GB. Das OP (und ich) suchen nach etwas, das 4 GB melden würde.grep MemTotal /proc/meminfo
3957032 kB
ist nur falsch beschriftet . Es sollte mit kiB gekennzeichnet sein, wie in diesem Beitrag angegeben . Das heißt, es werden tatsächlich 4.052.000.768 Bytes gemeldet, was etwas mehr als 4 GB ist. Dies liegt an der Tatsache, dass die Implementierungen von / proc / meminfo vor der KiB-Notation liegen./proc/meminfo
erforderlich war , denke ich, dass die Meldung von Zahlen in kiB ein äußerst wichtiger Teil dieser Diskussion ist, unabhängig davon, ob @TvE beabsichtigte, eine andere Frage zu stellen.Fügen Sie die letzten 2 Einträge von hinzu
/proc/meminfo
, sie geben Ihnen den genauen Speicher, der auf dem Host vorhanden ist.Beispiel:
10240 + 4184064 = 4194304 kB = 4096 MB.
quelle
Ein weiterer nützlicher Befehl:
vmstat -s | grep memory
Beispielausgabe auf meinem Computer ist:
Ein weiterer nützlicher Befehl zum Abrufen von Speicherinformationen lautet:
free
Beispielausgabe ist:
Eine Beobachtung hier ist, dass der Befehl auch
free
Informationen über den Swap Space liefert.Der folgende Link kann für Sie nützlich sein:
http://www.linuxnix.com/find-ram-details-in-linuxunix/
quelle
vmstat -s -S M | grep ' memory'
Dadurch erhalten Sie den gesamten Speicher in Ihrem System in einem für Menschen lesbaren Format und können automatisch auf die entsprechende Einheit skaliert werden (z. B. Bytes, KB, MB oder GB).
quelle
Wenn Sie alle oben genannten Werte hinzufügen, die nach "Größe:" angezeigt werden, erhalten Sie die genaue physische Gesamtgröße aller RAM-Sticks im Server.
quelle
Gesamter Online-Speicher
Berechnen Sie den gesamten Online-Speicher mit dem System-fs.
Beispielausgabe für 4 GB System:
Erläuterung
Anzahl der Bytes in einem Speicherblock (Hex-Wert). Wenn Sie 0x vor dem Wert verwenden, wird sichergestellt, dass er während der Berechnung ordnungsgemäß behandelt wird.
Durchlaufen Sie alle verfügbaren Speicherblöcke, um zu überprüfen, ob sie online sind, und addieren Sie die berechnete Blockgröße zu totalmem, falls dies der Fall ist.
Sie können dies ändern oder entfernen, wenn Sie einen anderen Speicherstatus bevorzugen.
quelle
\
) verwenden, um in der nächsten Zeile fortzufahren. Zu&&
diesem Zweck können Sie auch das am Ende der Zeile verwenden.Gesamtspeicher in
Mb
:oder:
quelle
Dies sind die Wege:
1. / proc / meminfo
Sie können einen Code oder ein Skript schreiben, um ihn zu analysieren.
2. Verwenden Sie sysconf mithilfe der folgenden Makros
sysconf (_SC_PHYS_PAGES) * sysconf (_SC_PAGESIZE);
3. Verwenden Sie den Systemaufruf sysinfo
int sysinfo (struct sysinfo * info);
struct sysinfo {.
quelle
Ich finde
htop
ein nützliches Werkzeug.und dann
gibt die Informationen, die Sie benötigen.
quelle