Ich verwende Arch Linux (5.1.8-arch1-1-ARCH) mit XFCE DE und XFWM4 WM. Die Dinge sind ziemlich elegant und wenig RAM und CPU-Auslastung.
Nach dem Booten und wenn das DE vollständig geladen ist, sehe ich 665 MiB RAM-Auslastung.
Nach dem Öffnen von Anwendungen wie Atom, Code, Firefox, Chromium oder nach der Arbeit mit GIMP, Blender usw. steigt jedoch die RAM-Auslastung, was offensichtlich ist. Aber nachdem ich alle Anwendungen geschlossen und nur einen Gnome-System-Monitor übrig gelassen habe, kann ich sehen, dass die RAM-Auslastung 1,2 - 1,4 GiB beträgt. / proc / meminfo stimmt mit gnome-system-monitor überein, aber htop liefert ständig unterschiedliche Ergebnisse.
Das Schlimmste ist, dass wenn ich später eine RAM-Hogging-Anwendung öffne, diese zusätzlich zu den 1,4 GiB wieder den benötigten Speicher verbraucht. Dies ist immer der Fall. Im Verzeichnis / tmp / werden keine Dateien gespeichert, die sich auf Megabyte summieren könnten.
Wenn ich nach dem Prozess suche, der so viel RAM verbraucht (von 700 MiB zu Beginn bis 1,4 GiB nach dem Schließen des Browsers !!), sehe ich nichts. Tatsächlich hatte ich sogar auf meinem Himbeer-Pi mit Arch ARM das gleiche Problem.
Der Ruby-Code:
#!/usr/bin/ruby -w
STDOUT.sync = true
loop do
IO.readlines(File.join(%w(/ proc meminfo))).then { |x| [x[0], x[2]] }.map { |x| x.split[1].to_i }.reduce(:-)
.tap { |x| print "\e[2K\rRAM Usage:".ljust(20), "#{x / 1024.0} MiB".ljust(24), "#{(x / 1000.0)} MB" }
Kernel.sleep(0.1)
end
Der cat /proc/meminfo
Befehl hat folgende Ausgabe:
MemTotal: 3851796 kB
MemFree: 1135680 kB
MemAvailable: 2055708 kB
Buffers: 1048 kB
Cached: 1463960 kB
SwapCached: 284 kB
Active: 1622148 kB
Inactive: 660952 kB
Active(anon): 923580 kB
Inactive(anon): 269360 kB
Active(file): 698568 kB
Inactive(file): 391592 kB
Unevictable: 107012 kB
Mlocked: 32 kB
SwapTotal: 3978216 kB
SwapFree: 3966696 kB
Dirty: 280 kB
Writeback: 0 kB
AnonPages: 924844 kB
Mapped: 563732 kB
Shmem: 374848 kB
KReclaimable: 74972 kB
Slab: 130016 kB
SReclaimable: 74972 kB
SUnreclaim: 55044 kB
KernelStack: 8000 kB
PageTables: 14700 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 5904112 kB
Committed_AS: 3320548 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
Percpu: 1456 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 226736 kB
DirectMap2M: 3778560 kB
DirectMap1G: 0 kB
Erstens haben Sie bemerkt, dass htop niemals zustimmt. Ich weiß nicht viel darüber.
Und zweitens können Sie sehen, dass das xfdesktop 44 MiB verwendet und einige andere Prozesse einen Teil des Speichers verwenden, der Kernel ~ 150 MiB und abgesehen davon, warum 1,5 GB RAM verwendet werden? Beeinträchtigt dies wirklich die Leistung des Systems?
quelle
Antworten:
Nicht verwendeter RAM ist verschwendeter RAM. Der Linux-Kernel verfügt über erweiterte Speicherverwaltungsfunktionen und versucht, den Engpass in Ihrem System, Ihrer Festplatte / SSD, nicht zu belasten. Es wird versucht, Dateien im Speicher zwischenzuspeichern.
Das Speicherverwaltungssystem arbeitet auf komplexe Weise, eine bessere Leistung ist das Ziel.
Sie können sehen, was es tut, indem Sie inspizieren
/proc/meminfo
.cat /proc/meminfo
Sie können diesen zwischengespeicherten Speicher mit "drop_caches" zurückfordern. Beachten Sie jedoch in der Dokumentation, dass "die Verwendung außerhalb einer Test- oder Debugging-Umgebung nicht empfohlen wird", einfach weil "das erneute Erstellen der abgelegten Objekte eine erhebliche Menge an E / A und CPU kosten kann", wenn sie erneut benötigt werden :-).
Nur PageCache löschen:
Löschen Sie Einträge und Inodes:
PageCache, Einträge und Inodes löschen:
Beachten Sie, dass dadurch
sync
der Dateisystempuffer geleert wird, um sicherzustellen, dass alle Daten geschrieben wurden.Aus den Kernel-Dokumenten :
Speicherlecks
Einige Programme können nun "Speicherlecks" aufweisen, dh sie "vergessen", Speicher freizugeben, den sie nicht mehr verwenden. Sie können dies sehen, wenn Sie ein Programm einige Zeit laufen lassen, seine Speichernutzung ständig zunimmt. Wenn Sie es schließen, wird der Speicher nie freigegeben. Jetzt versuchen Programmierer natürlich, Speicherlecks zu vermeiden, aber Programme können einige haben. Die Möglichkeit, diesen Speicher zurückzugewinnen, ist ein Neustart.
quelle
cat /proc/meminfo
After Boot ein und dann noch einmal, nachdem Sie "den Speicher freigegeben / freigegeben" haben. Erwähnen Sie auch, welche Befehle Sie verwendet haben, um "Speicher freizugeben".free
oder gleichwertig ist.Sie haben sich eine Liste der Prozesse und deren Speichernutzung angesehen. Aber es gab ein Problem. Sie haben nicht die vollständige Liste angesehen.
gnome-system-monitor
zeigt standardmäßig nur "Meine Prozesse" an.root
Klicken Sie auf das Menüsymbol oben rechts (drei Punkte in einer vertikalen Linie), um Prozesse anzuzeigen, die allen Systembenutzern gehören, einschließlich des Benutzers. Ändern Sie die Auswahl von "Meine Prozesse" in "Alle Prozesse".atop
heute installieren 8-)1. Wird im Vergleich zum verfügbaren System-RAM als einzelne Nummer verwendet
Ich sehe deine Ruby - Code Subtraktionen
MemAvailable
ausMemTotal
. Dies ist genau die gleiche Berechnung, die von verwendet wirdgnome-system-monitor
, wenn das System "1,5 GiB (41,4%) von 3,7 GiB" verwendet.Sie haben das Recht, entweder
gnome-system-monitor
oder Ihre manuelle Berechnung zu verwenden, zumindest als erste Annäherung. DieMemAvailable
Nummer enthält im Grunde den gesamten zurückforderbaren "Cache". DhMemAvailable
enthält eine Art "Cache", der "verfügbar" ist, um zurückgefordert zu werden, sobald ein Programm mehr Speicher benötigt, als Sie frei haben.Randnotiz: Es gibt einen anderen Typ oder eine andere Bedeutung von "Cache", die nicht zurückgefordert werden kann . Wenn Sie sich die
Cache
/ "Cache" -Nummer ansehen , wird normalerweise gemeldet, dass sieShmem
/ "shared" enthält. DerShmem
Teil ist kein Cache. Die Verwirrung tritt auf, weilShmem
sie mit dem "Seiten-Cache" des Kernels geschickt implementiert wurde.Eine andere Möglichkeit, schnell "verfügbar" zu überprüfen, ist
free -h
.Der
free
Befehl zeigt auch "freigegeben", Swap-Verwendung usw. an. In Ihrer Systemdokumentation sollten die Ausgabefelder und verfügbaren Optionen aufgeführt sein, zman free
. Einige der anderen Felder können irreführend sein:free
Befehl enthält (derzeit) nicht "freigegeben". Dies kann sehr verwirrend sein. Ignorieren Sie das Feld "verwendet" .free
leidet unter dem oben angegebenen Problem.free
nicht "verfügbar" angezeigt wird, ist Ihr System uralt. Konsultieren Sie Ihre alte Dokumentation.2. Analysieren von / proc / meminfo
Vielen Dank für die volle Ausgabe von
cat /proc/meminfo
. Dies hilft oft dabei, bestimmte Antworten (oder überhaupt eine Antwort) zu finden. Wenn Sie sehen möchten, wieMemAvailable
die Berechnung selbst durchgeführt wird, können Sie den ersten Abschnitt meiner Antwort hier lesen: Ist der "zwischengespeicherte" Speicher de facto frei?AnonPages
In Ihrem Beispiel
meminfo
haben SieAnonPages: 924844 kB
(0,9 GB).AnonPages
ist einer der Begriffe, die reduziertMemAvailable
.Wenn dies
AnonPages
zunimmt, sollte dies auf eine Zunahme von "RES" oder "RSS" ("Resident" in RAM "Set Size") einiger laufender Programme hinweisen. RSS kann jedoch irreführend sein, da ein Teil des Speichers gemeinsam genutzt wird:Sie können RSS nicht addieren, da dies den gemeinsam genutzten Speicher doppelt zählen würde. Sie müssen PSS , das proportionale RSS, nach Berücksichtigung der Freigabe addieren . Der
smem
Befehl kann PSS anzeigen und auch Summen berechnen. Zum Beispiel:sudo smem -t > p; head -n1 p; echo; tail -n17 p
- Sehen Sie sich die Speichernutzung pro Prozess an. Dertail
Teil zeigt die Top 15 Prozesse, gefolgt von einer Zeile mit der gesamten PSS usw.smem -t -U ^sourcejedi$ > U; head -n1 U; echo; tail -n17 U
- Sehen Sie sich die Speichernutzung von Prozessen an, die meinem Benutzer "sourcejedi" gehören.sudo smem -t -u
- Sehen Sie sich den nach Benutzer gruppierten Speicher an. Dies kann nützlich sein, um Ihre Anmeldesitzungen von einigen Systemdämonen zu unterscheiden, die als eigene Benutzer ausgeführt werden. Beispielsweise wird packagekitd alsroot
Benutzer ausgeführt und kann Hunderte von Megabyte verwenden.smem -t -P firefox
- Sehen Sie sich die Speichernutzung meines Webbrowsers an :-).sudo smem -t -m > m; head -n5 m; echo; tail m
- Sehen Sie sich den Speicher an, der nach dem Zuordnungsnamen gruppiert ist - dem Namen der zwischengespeicherten Datei oder "<anonym>" oder "[Heap]" .Der "residente" Prozessspeicher enthält sowohl "anonymen" Speicher als auch einige zwischengespeicherte Dateien.
smem -m
Es können nicht alle zwischengespeicherten Dateien angezeigt werden, sondern nur bestimmte Dateitypen, die derzeit verwendet werden. Insbesondere Dateien, die ein Programm dem virtuellen Speicher zugeordnet hat. Dies umfasst Programmcode, Bibliothekscode und Dateien, die mit mmap () zugeordnet wurden.Shmem
Sie haben auch
Shmem: 374848 kB
(0,4 GB). Ich habe oben erwähntShmem
/ "geteilt". Dies ist ein weiterer Begriff, der den "verfügbaren" Speicher reduziert. (Es ist kein Cache zurückgefordert). Das ist ziemlich normal, aber Sie könnten versuchen zu sehen, was es ist.Ein Teil des gemeinsam genutzten Speichers ist als Speicher einzelner Prozesse sichtbar. Wenn der gemeinsam genutzte Speicher von einem Prozess zugeordnet wird, sollte er im RSS / PSS gezählt werden. Siehe oben. Der "Zuordnungsname" kann hier manchmal nützlich sein (z
smem -t -m
. B. ).Shmem
Enthält Dateien auf gemountettmpfs
. Sie können alle gemountetentmpfs
mit überprüfendf -t tmpfs
.Abhängig von Ihrem System
Shmem
können einige Grafikpuffer enthalten sein. Ich habe eine Möglichkeit gefunden, die aktuelle Größe auf meinem System zu überprüfen (Intel-Grafik): Kann ich die Speichermenge anzeigen, die als GEM-Puffer zugewiesen ist? Ich würde gerne wissen, ob Sie einen anderen Weg finden, um Ihr System zu überprüfen!Ich habe gelesen, dass
Shmem
Speicherverluste in einigen anderen Grafiktreibern mit sehr großen VIRT (auch bekannt als VSIZE) für Xorg verbunden sein können. Linux verwendet den gesamten Swap und reagiert nicht mehr, solange genügend freier Arbeitsspeicher vorhanden istAndere Speichernutzung?
MemTotal - MemAvailable = 1796088 kB
(1,8 GB)AnonPages: 924844 kB
(0,9 GB)Shmem: 374848 kB
(0,4 GB)Von den verbleibenden 0,5 GB sehe ich einige weitere kleine Anwendungen unter insgesamt 0,1 GB. Der Kernel reserviert auch ein paar Prozentpunkte Marge für sich selbst (siehe "Niedrigwassermarke"), aber ich denke, es wären 0,2 GB oder weniger auf Ihrem System. Es gibt also etwas mehr Verwendung, bei der ich mir nicht sicher bin.
Kernel-Plattenspeicher
Der Speicher "Nicht wiedergewinnbare Platte" ist ein weiterer Begriff, der reduziert wird
MemAvailable
. Sie haben nicht viel:SUnreclaim: 55044 kB
(0,05 GB).3. Andere Tools, die Sie verwenden könnten - installieren Sie noch
atop
heute 8-)smem
könnte übertrieben sein. Manchmal ist alles, was Sie brauchentop
, oder Ihre Lieblingsalternative und zu wissen, wie man nach residentem Speicher sortiert. (Obwohl diesgnome-system-monitor
möglicherweise keine gute Wahl ist. Ich denke, es zeigt nicht wirklich genug).Manchmal, wenn Sie ein Leistungsproblem haben, müssen Sie sich stattdessen das Lesen und Schreiben von Datenträgern ansehen. Sie könnten verwenden
sudo iotop
.Manchmal möchten Sie ein Protokoll über die Speichernutzung pro Prozess haben, damit Sie sehen können, warum Ihnen der Arbeitsspeicher ausgegangen ist und das System zu einem Crawl verlangsamt wurde ...
atop
ist ein geschicktes kleines Werkzeug, das all das kann. Wenn dies nützlich klingt, empfehle ich Ihnen, es sofort zu installieren. Dann kannst du es lernen, wenn du es brauchst :-).sudo atop -R
zeigt "PSIZE" (gleiche Bedeutung wie "PSS"). Dasatop
Paket enthält einen Hintergrunddienst, der im Abstand von zehn Minuten ausgeführt wird. Sie könnenatop -r ...
damit die Protokolldateien öffnen, die unter / var / log / atop / gespeichert sind.quelle
smem
sieht aus wie ein separates Paket, das nicht mit Arch's Basissystem geliefert wird. Ich musste es installieren, aber ab jetzt ist es besser, smem zu installieren. Auf jeden Fall zeigt der Gnome-System-Monitor diese Anwendungen jedoch auch an (möglicherweise müssen SieShow Dependencies
eine vollständige Liste auswählen )!