- 
	14.08.2021, 18:03 #1  Hi! Ich möchte herausfinden, wie viel RAM/Arbeitsspeicher ein Prozess auf meinem Linux wirklich verbraucht. Als Beispiel der Chromium Browser. Mein erster Versuch war über ps. Die Ergebnisse waren unrealistisch.  
 
 Das widerspricht sich mit free, laut dem nur knapp 300MB belegt sind. Code:ps -u $USER -o rss,comm | awk '$NF~/^chromium/ {sum+=$1} END {printf "%.1f MB\n",sum/1024}' 628.1 MB
 Also kann Chrome ja nicht doppelt so viel verbrauchen... Beim Recherchieren habe ich einen interessanten Blogartikel gefunden der eine Erklärung liefert:Code:free -h               total        used        free      shared  buff/cache  available Mem:          3,7Gi      297Mi      3,0Gi      102Mi      472Mi      3,2Gi 
 Auf SO habe ich dazu gelesenJe nachdem, wie man es betrachtet, meldet ps nicht den tatsächlichen Speicherverbrauch von Prozessen. Vielmehr zeigt es an, wie viel Speicher jeder Prozess tatsächlich beanspruchen würde, wenn er der einzige laufende Prozess wäre. Natürlich laufen auf einem typischen Linux-Rechner zu jeder Zeit mehrere Dutzend Prozesse, was bedeutet, dass die von ps gemeldeten VSZ- und RSS-Zahlen mit ziemlicher Sicherheit falsch sind.
 Auch da schlägt man pmap vor. Also die PIDs ermitteln und mit pmap schauen (unbedingt sudo nutzen sonst fehlen die Rechte um die Daten auszulesen!). Ich habe ein Skript geschrieben, dass psof mit allen chromium Prozessen aufruft:Mit ps oder ähnlichen Tools erhalten Sie nur die Anzahl der von diesem Prozess belegten Speicherseiten. Diese Zahl ist korrekt, aber:
 - spiegelt nicht die tatsächliche Menge des von der Anwendung verwendeten Speichers wider, sondern nur die Menge des für sie reservierten Speichers
 - kann irreführend sein, wenn Seiten gemeinsam genutzt werden, z. B. von mehreren Threads oder durch die Verwendung dynamisch verknüpfter Bibliotheken
 
 Leider liefert das noch unrealistische Ergebnisse:Code:#!/bin/bash #for pid in $(ps -ax | grep chromium-browser | awk '{print $1}'); do sudo pmap $pid | grep total | awk '{print $2}' | sed 's/K//g'; done totalMem=0 for pid in $(ps -ax | grep chromium-browser | awk '{print $1}') do         mem=$(sudo pmap $pid | grep total | awk '{print $2}' | sed 's/K//g')         if [ ! -z "$mem" ]; then                 totalMem=$(expr $totalMem + $mem)                 echo "$pid: $mem = $(expr $mem / 1024) MB"         else                 echo "No memory found for pid $pid"         fi done echo "Total: $totalMem = $(expr $totalMem / 1024) MB"
 Es scheint irgendwie was doppelt ausgegeben sein. Laut free sind 302M belegt.Code:3926: 461088 = 450 MB 3954: 215924 = 210 MB 3955: 215924 = 210 MB 3959: 215924 = 210 MB 3993: 284300 = 277 MB 4009: 257288 = 251 MB 4038: 307336 = 300 MB 4048: 231076 = 225 MB 4294: 351736 = 343 MB 4511: 339664 = 331 MB 4512: 262728 = 256 MB 4527: 319212 = 311 MB No memory found for pid 14262 Total: 3462200 = 3381 MB 
 Langsam bin ich mit meinen Latein am Ende, könnt ihr mir helfen wie ich den echten belegten Speicher eines Prozesses rausfinden kann?
 
 
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.
 
									 
														 
														 
				
				 
			 
					
					
					
						 Zitieren
  Zitieren