Linux verfügbarer Gesamtspeicher

9

Ich versuche eine gute Formel herauszufinden, wie viel Speicher verfügbar ist. Ich verwende momentan die folgende Formel: freeMem = MemFree + Buffers + Cached - Shmem . Nach dieser Formel verliert mein eingebettetes System jedoch Speicher. Jetzt frage ich mich, ob ich ein Speicherleck habe, also habe ich kmemleak im Kernel aktiviert. Laut mpatrol , valgrind und coverity habe ich keine Lücken im Benutzerbereich. Gibt es ein Leck im Kernelraum oder ist meine Formel deaktiviert? Beachten Sie, dass ich für dieses Gerät keinen Swap habe.

%Vor%     
atomicbaum 01.12.2011, 21:52
quelle

6 Antworten

2

Der Speicher von userland wird nicht in /proc/meminfo angezeigt, da der Kernel Speicher zugewiesen hat (egal ob Sie free () in Ihrer userland App verwenden oder nicht, es wird entweder mit der mmap zugewiesen ( ) syscall oder brk () / sbrk () und der Kernel verfolgt die im Userland zugewiesenen Seiten, sonst wären wir in ernsthaften Schwierigkeiten;).

Ich verstehe nicht genau, wie Sie auf Ihren Glauben gekommen sind, dass Ihre Erinnerungen ausgelaufen sind? Hier ist ein guter Link redhat / meminfo wenn du es noch nicht gelesen hast, was jede Statistik wirklich erklärt bedeutet.

    
Quentin Casasnovas 01.12.2011 22:45
quelle
1

Ihrer Berechnung für den "freien Speicher" fehlt eine Sache - sie sollte SReclaimable (für den wiedergewinnbaren Slab-Cache) zum effektiv freien Speicher hinzufügen.

Wenn sich dadurch die langsame Reduzierung des effektiv freien Speichers im Laufe der Zeit nicht ändert, sollten Sie in regelmäßigen Abständen Snapshots von /proc/meminfo erstellen und ermitteln, in welcher Zeile der Anstieg angezeigt wird.

Wenn es die SUnreclaim -Zeile ist, die ansteigt, können Sie in /proc/slabinfo nachsehen, um die Verwendung Ihrer Kernel-Platte zu sehen und den Schuldigen zu identifizieren. Es ist möglich, dass es einfach die Speicherfragmentierung ist, die Sie beobachten, und es wird sich eventuell über einen längeren Zeitraum beruhigen.

    
caf 05.12.2011 03:57
quelle
0

Vereinbar mit auxv - Die Verwendung von / proc / meminfo ist wahrscheinlich nicht die beste Methode, um den Arbeitsspeicher des Benutzers zu verfolgen, da er Speicher enthält, der von allen Benutzerprozessen zugewiesen wird. Dadurch ist es schwierig, den Verbrauch Ihres Prozesses einzuschränken.

Eine bessere Möglichkeit, den gesamten von Ihrem Prozess verbrauchten Speicher zu verfolgen, wäre die Verwendung von top (1) und die Betrachtung von VIRT (einschließlich Speicherauslagerung) oder RES (die nur physischen Speicher umfasst).

Aber wenn du / proc / meminfo benutzen willst, wäre die Formel, die ich verwenden würde:

  

MemTotal = MemFree + Cache + Puffer + SwapCached

... beachten Sie, dass dies nur für Daten gilt, nicht für Code. Der größte Teil von MemTotal - (Menge rechts neben der Gleichung) sollte Ihr Kernel-Image sein.

    
er0 01.12.2011 22:59
quelle
0

Für meine Systeme verwende ich den folgenden Befehl, um zu überprüfen, wie viel Speicher verbraucht wird:

%Vor%

Dies fügt den Gesamtprozentsatz des verwendeten Speichers für alle laufenden Prozesse hinzu.

    
user1403360 18.05.2012 13:26
quelle
0

FreeMem = MemFree + Puffer + Cache - Mapped, Der zwischengespeicherte Speicher enthält den zugeordneten Teil, dieser Teil wurde dem Benutzerbereich zugeordnet.

    
Samuel 18.09.2015 03:22
quelle
0

Früher war es MemFree + catched (was vor vielen Jahren korrekt ist).

Jetzt ist es MemFree + Active (Datei) + Inactive (Datei) + SRreclaimable.

Für weitere Referenz gehen Sie durch LINUX TORVALD den Link unten.

Ссылка

    
Arjun Jv 08.05.2017 10:49
quelle