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!
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
:
Bearbeitet durch User
> awk -F' ' '$1 ~ /^MemFree/ {print $2/1024}' /proc/meminfo
34725.2
Das war jetzt kein RasPi, awk dürfte aber auch da drauf sein.
:
Bearbeitet durch User
Das geht auch mit awk alleine (ohne grep wie zu Beginn im mehrmals korrigierten Beitrag zuvor):
1 | $ awk '/^MemFree:/ {print $2}' /proc/meminfo |
Ja, awk gehört zu den Tools, die ich nur alle paar Jahre mal verwende.
> Ja, awk gehört zu den Tools, die ich nur alle paar Jahre mal verwende.
Verstaendlich! Nimmt man das jeden Tag wird man schnell wirr in der
Ruebe. :-D
Vanye
Vanye R. schrieb: > Verstaendlich! Nimmt man das jeden Tag wird man schnell wirr in der > Ruebe. :-D Bin ich schon. Ich präferiere sei jeher perl.
(prx) A. K. schrieb: > /^MemFree/ Sollte er nicht eher MemAvailable nehmen? Sonst verweigert seine Software immer den Dienst sobald der Disk-Cache gefüllt ist, obwohl eigentlich massig RAM zur Verfügung steht...
Ε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.
:
Bearbeitet durch User
Ohne Awk (setzt aber einen gleichbleibenden Aufbau der Ausgabe von free voraus):
1 | a=($(free -m)); echo ${a[9]} |
Mit der einzeiligen Ausgabe (-L) von free:
1 | a=($(free -Lm)); echo ${a[7]} |
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.
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 ...
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)
Εrnst B. schrieb: > Dafür ist "MemFree" nicht der richtige "Messwert". Zum Finden von Memory Leaks ist valgrind [1] eine sinnvolle Lösung. [1] https://valgrind.org/docs/manual/quick-start.html
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.