FreeBSD und Speicherverwaltung (Memory)

Wasp

Insektenspray-Gegner
Hi,

mir ist aufgefallen, daß seit (m)einer Neuinstallation (von Grund auf) mit FreeBSD 8.1-Release und Xorg 1.7.5,1 mein Speicher bei längerer Benutzung regelmäßig so voll läuft, daß kein Speicher mehr zur Verfügung steht um neue Anwendungen zu starten oder sogar im bereits geöffneten Opera eine Seite zu aktualisieren.

Versuche ich nach längerer Zeit zum Beispiel Rox zu starten, sieht das wie folgt aus:
Code:
% rox
/usr/local/apps/ROX-Filer/AppRun: Pipe call failed: Cannot allocate memory
Bisher trat das Problem beide male am nächsten Morgen auf.

"top -o size" sagt in diesem Falle dann:
Code:
Mem: 843M Active, 597M Inact, 446M Wired, 45M Cache, 212M Buf, 31M Free
Swap: 2048M Total, 124K Used, 2048M Free

  PID USERNAME    THR PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
89620 wasp          3  76    0  1143M   636M ucond   0 224:10 18.90% opera
89612 wasp          1  44    0   868M 45552K select  0   9:19  0.00% Xorg
91253 wasp          2  44    0   173M 48548K uwait   0   3:20  0.00% python2.6
91250 wasp          6  44    0   154M 16156K ucond   0   2:26  0.00% mpd
90908 wasp          1  44    0   120M 23328K select  1   0:10  0.00% ario
15647 wasp          1  44    0 94812K 12708K select  1   0:02  0.00% urxvt

Wie man sieht belagern Opera und Xorg -- für mein empfinden -- unverhältnismäßig viel Speicher. Aber auch Ario, welches eigentlich nur eine simple GTK-Oberfläche zu MPD ist verschlingt sage und schreibe 120 MB. Durch das Beenden von z. B. Ario wird der Speicher nicht wieder frei -- und ich meine nicht nur in der "top"-Anzeige sondern so frei, daß sich Rox starten ließe. Den Spruch, daß freier Speicher, verschwendeter Speicher ist, kenne ich und kann ich auch unterstützen; jedoch das der Speicher, wenn er von anderen Programme benötigt wird anscheinend nicht wieder frei gegeben wird, würde ich nicht als normal ansehen und konnte ich auf meinem alten System mit FreeBSD 6.2-Stable auch noch nie feststellen.

Lösen läßt sich das Problem nur durch Beenden und Neustart des kompletten Xorg. Innerhalb von ein bis zwei Tagen ist der Speicher allerdings dann wieder voll und ich muß Xorg erneut beenden und neustarten.

Info zum System:
Systemlaufzeit: 4 Tage, 8 Std.
RAM: 2048 MB
FreeBSD 8.1-Release (amd64)
Xorg 1.7.5
Opera 10.10 Build 4742

Jemand eine Idee oder wenigstens ähnliche Erfahrungen gemacht?

Gruß
Wasp
 
Du guckst in der falschen Spalte. Tatsaechlich belegt mpd nur etwa 16MB. Die Spalte "RES" zeigt dir den "residual memory", also den Speicher der tatsaechlich im RAM belegt wird. "SIZE" dagegen gibt dir den virtuellen Speicher, also der Speicher den das OS inkl. in den SWAP ausgelagerten Teilen, nicht initialiserten dynamisch allokierten Speicher, dynamische Bibliotheken usw... belegt. Das ist aber nicht der Platz der im Speicher komplett verbraten wird. Deshalb ist der i.d.R. groesser, teilweise um einiges groesser als RES.

Ich wuerde einfach mal den Opera beenden, denn der scheint hier ja den Loewenanteil zu verbrauchen. Wahrscheinlich leakt der einiges an Speicher, wenn ich mir die Groesse so ansehe, oder du musst eine halbe Millionen Tabs offen haben.
Ich finde es trotzdem ungewoehnlich, das er Rox nicht mehr startet, da sollte eigentlich mehr als genug da sein. Sind ja fast noch 600 MB frei.
Sicher das er keinen "anderen" Speicher braucht? Wie zB fuer IPC? Vllt solltest du den mal den shared memory einfach hoeher drehen und dann nochmal versuchen.
 
Wenn ich mir RES statt SIZE anschaue, dann sieht das schon wesentlich entspannter aus. :)

Ja, gehöre zu der Fraktion, die ausgiebigen von der Tab-Funktionalität inkl. der Möglichkeit "Fortsetzen wo Opera beendet wurde" Gebrauch macht. Wir reden hier von einem zweistelligen Bereich :) -- aber ich denke selbst bei 99 Tabs sollte Opera kein gutes Gigabyte fressen. Mit dem Speicherleck klingt irgendwie plausibel.

Wie kann ich mir denn den Verbrauch des Shared Memory anzeigen lassen und wie setze ich ihn gegebenenfalls höher? Habe hier bereits kern.ipc.shmall (aktuell gesetzt auf 8192) und kern.ipc.max (aktuell gesetzt auf 33554432) ausfindig gemacht. Handelt es sich hierbei um die korrekten Systemschrauben? (Fehlt ggf. noch was?)
 
ich denke mal ipc.max ist mehr als ausreichend, aber ich wuerde mal shmall anheben. Ich habs auf kern.ipc.shmall=65536 gesetzt. Ich wuerde sagen, versuchs einfach mal. ;)
 
Zurück
Oben