Linux-Frage zu Kommando "free -m"

(Firma: Q3) #7800119
Lesenswert?

Ich benötige in einer App den noch freien RAM. Wenn ich auf der Konsole schreibe "free -m" bekomme ich - rein optisch - alles was ich wissen will.

Möchte ich dieses Ergebnis programmtechnisch auswerten, muss mich mich aufwändig durch den Text parsen. Kennt jemand eine Variation von "free" (oder einem anderen Kommando, was auf dem Raspi NICHT zusätzlich installiert werden muss), das einfach nur eine Zahl für "frei" zurückgibt und sonst (möglichst) nichts?

Wenn möglich auch unbahängig von der eingestellten Sprache ... Danke!

Angehängte Dateien:
#7800121
Lesenswert?

cat /proc/meminfo MemTotal: 131901212 kB MemFree: 35571576 kB MemAvailable: 40435812 kB Buffers: 455452 kB Cached: 5151988 kB SwapCached: 0 kB Active: 1430812 kB Inactive: 93672304 kB Active(anon): 1824 kB Inactive(anon): 89496820 kB Active(file): 1428988 kB Inactive(file): 4175484 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 974844 kB SwapFree: 974844 kB Dirty: 608 kB Writeback: 0 kB AnonPages: 89462908 kB Mapped: 529024 kB Shmem: 2968 kB KReclaimable: 508984 kB Slab: 733124 kB SReclaimable: 508984 kB SUnreclaim: 224140 kB KernelStack: 79872 kB PageTables: 215124 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 66925448 kB Committed_AS: 84468800 kB VmallocTotal: 34359738367 kB VmallocUsed: 95492 kB VmallocChunk: 0 kB Percpu: 36960 kB HardwareCorrupted: 0 kB AnonHugePages: 85866496 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB FileHugePages: 0 kB FilePmdMapped: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 0 kB DirectMap4k: 722816 kB DirectMap2M: 60094464 kB DirectMap1G: 75497472 kB

#7800144
Lesenswert?

Εrnst B. schrieb:

Sollte er nicht eher MemAvailable nehmen?

Das ist eine andere Frage. Er wollte das, was bei "free -m" unter "frei" steht. Kann er haben.

Über die Hintergründe dieser Zahlen sind schon einige gestolpert, inklusive externe Entwickler und Sysadmins, denen beim Sizing von Maschinen die Düse ging, weil ihnen bei sowas wie unten zu wenig "free" erschien. Hiess dann "MEHR RAM, NOCH MEHR RAM!" :)

1
free -m
2
              total        used        free      shared  buff/cache   available
3
Mem:          64403        1419        9925           6       53058       62293
4
Swap:         33718         131       33587

Ich konnte sie dann nach einiger Überzeugungsarbeit über die Bedeutung etwas runterhandeln, aber da ist noch viel Luft nach unten.

#7800158
Lesenswert?

Frank E. schrieb:

Ich benötige in einer App den noch freien RAM.

Nö. Denn was immer dir ausgegeben wird kann in der nächsten Millisekunde schon von einem anderen Prozess weggeschnappt worden sein.

Sich auf den Wert zu verlassen ist Pfusch. Der korrekte Weg ist so viel Speicher anzufordern wie man gerne hätte und dann zu testen ob man ihn bekommen hat.

(Firma: Q3) #7800194
Lesenswert?

Alexander S. schrieb:

Das geht auch mit awk alleine (ohne grep wie zu Beginn im mehrmals korrigierten Beitrag zuvor): $ awk '/^MemFree:/ {print $2}' /proc/meminfo

Ok, danke, funzt.

Ich nutze das, um Fehler aufzuspüren, wenn selbstgeschriebene Apps (jeweils die Einzige auf dem Raspi neben dem System) immer mehr Speicher benötigen ...

#7800200
Lesenswert?

Frank E. schrieb:

Ich nutze das, um Fehler aufzuspüren, wenn selbstgeschriebene Apps (jeweils die Einzige auf dem Raspi neben dem System) immer mehr Speicher benötigen ...

Dafür ist "MemFree" nicht der richtige "Messwert".

Schau dir lieber mal "/proc/<pid>/statm" an.

(Dokumentation dazu https://www.kernel.org/doc/Documentation/filesystems/proc.txt)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren