🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: ch.comp.os.linux
4 messages
4 total messages Started by Johannes Vogel Fri, 30 May 2008 08:24
Memory Verschleiss?
#411
Author: Johannes Vogel
Date: Fri, 30 May 2008 08:24
31 lines
2181 bytes
Hi Leute

F�r meine privaten Server-Dienste benutze ich einen VServer auf Basis 
Virtuozzo und Debian Linux 2.6 (2.6.9-023stab044.12-smp). Ich stelle nun 
fest, dass immer mal wieder kein Memory mehr vorhanden ist, offenbar 
also Prozesse zu viel Memory klauen. Insgesamt steht mir wie folgt 
Memory zur Verf�gung (/proc/user_beancounters)
resource held    maxheld  barrier  limit    failcnt
kmemsize 8057677 17785274 17777274 19555001 13540

Ich habe mich also mal mit den /proc/[number]/maps auseinander gesetzt 
und finde da viele Memory-Stellen, die unbenutzt scheinen:

08048000-080e5000 r-xp ... 00:0f 142936716   /usr/.../httpd
080e5000-080e8000 rwxp ... 00:0f 142936716   /usr/.../httpd
080e8000-08301000 rwxp ... 00:00 0
b6f8d000-b6fc1000 rwxs ... 00:11 1369945414
...

Die letzten beiden Zeilen in diesem Auszug scheinen ja zu keinem 
Programm zu geh�ren. Wenn man diese Zeilen addiert, komme ich auf 
immerhin 952 MB Speicher, die da erw�hnt werden.

Es stellt sich mir also die Frage, ob Linux diese Speicherbereiche 
unn�tig reserviert (ala Fragmentation) oder ob der Speicher von weiteren 
Applikationen gebraucht werden kann.

Wer weiss was dr�ber oder kann mir zeigen, wo ich mehr dar�ber lesen kann?

Herzlichen Dank,
Johannes
Re: Memory Verschleiss?
#412
Author: Christof Buergi
Date: Fri, 30 May 2008 11:22
27 lines
2530 bytes
Johannes Vogel schrieb:
> Für meine privaten Server-Dienste benutze ich einen VServer auf Basis 
> Virtuozzo und Debian Linux 2.6 (2.6.9-023stab044.12-smp). Ich stelle nun 
> fest, dass immer mal wieder kein Memory mehr vorhanden ist, offenbar 
> also Prozesse zu viel Memory klauen.

Es kann sein, dass du irgendwo ein so genanntes Memory Leak hast. Dieser 
Effekt tritt bei ständig laufenden Programmen auf, wenn ein gewisser, 
regelmässig durchgeführter Prozess Speicher reserviert, ohne ihn wieder 
freizugeben. Typisches Anzeichen dafür ist ein Programm, dessen 
Speicherverbrauch im Lauf der Zeit immer weiter ansteigt.

> Es stellt sich mir also die Frage, ob Linux diese Speicherbereiche 
> unnötig reserviert (ala Fragmentation) oder ob der Speicher von weiteren 
> Applikationen gebraucht werden kann.

Nein, Linux reserviert nicht "von sich aus" Speicher. Allerdings 
unterscheidet sich die Speicherverwaltung von vielen anderen Systemen:

Linux verwaltet den Speicher im so genannten mmap Verfahren. Vereinfacht 
gesagt dient praktisch der gesamte, freie Speicher als Festplattencache, 
wobei der Cache automatisch verkleinert wird, wenn ein Programm mehr 
Speicher anfordert. Was von Memoryutilities wie "free" als "freier 
Speicher" gemeldet wird, ist lediglich das, was weder von Progrmmen direkt 
alloziert noch für den Cache verwendet wird, also meist sehr wenig. Erst 
wenn "Cache" und "freier Speicher" beide auf kleine Zahlen fallen, ist der 
Speicher tatsächlich überbelegt.
Re: Memory Verschleiss?
#413
Author: Johannes Vogel
Date: Sat, 31 May 2008 09:17
29 lines
2480 bytes
Hi Christof

Christof Buergi wrote:
> Johannes Vogel schrieb:
>> Für meine privaten Server-Dienste benutze ich einen VServer auf Basis 
>> Virtuozzo und Debian Linux 2.6 (2.6.9-023stab044.12-smp). Ich stelle 
>> nun fest, dass immer mal wieder kein Memory mehr vorhanden ist, 
>> offenbar also Prozesse zu viel Memory klauen.
> Es kann sein, dass du irgendwo ein so genanntes Memory Leak hast. Dieser 
> Effekt tritt bei ständig laufenden Programmen auf, wenn ein gewisser, 
> regelmässig durchgeführter Prozess Speicher reserviert, ohne ihn wieder 
> freizugeben. Typisches Anzeichen dafür ist ein Programm, dessen 
> Speicherverbrauch im Lauf der Zeit immer weiter ansteigt.

Tatsächlich stelle ich fest, dass Apache und MySQL ein solches Verhalten 
aufweisen. Natürlich sind diese zwei aber auch gerade Applikationen, die 
ich häufig verwende. Trotzdem bin ich etwas erstaunt, weil sie ja doch 
vielfach verwendet werden. Mir fällt vor allem auf, dass Apache schnell 
mal die maximale Anzahl Client einnimmt - obwohl

Herzlichen Dank für die Ausführung zum mmap Verfahren. Unter `top` sehe 
ich aber nur:
Mem: 1310720k total, 844048k used, 466672k free, 0k buffers
Wenn ich dich richtig verstand wird bei mir die HDD nicht gecached? Ok, 
ich befinde mich auf einem VServer-System - vielleicht möchte der 
Anbieter da möglichst RAM sparen?

Herzlichen Dank,
Johannes
Re: Memory Verschleiss?
#414
Author: Johannes Vogel
Date: Sat, 31 May 2008 09:21
42 lines
3035 bytes
Hi Harald

Harald Weidner wrote:
> Johannes Vogel <newsgroups@jvogel.ch>:
>> Ich habe mich also mal mit den /proc/[number]/maps auseinander gesetzt 
>> und finde da viele Memory-Stellen, die unbenutzt scheinen:
>> 08048000-080e5000 r-xp ... 00:0f 142936716   /usr/.../httpd
>> 080e5000-080e8000 rwxp ... 00:0f 142936716   /usr/.../httpd
>> 080e8000-08301000 rwxp ... 00:00 0
>> b6f8d000-b6fc1000 rwxs ... 00:11 1369945414
>> ...
>> Die letzten beiden Zeilen in diesem Auszug scheinen ja zu keinem 
>> Programm zu geh�ren. Wenn man diese Zeilen addiert, komme ich auf 
>> immerhin 952 MB Speicher, die da erw�hnt werden.
> Die Speicherbereiche geh�ren durchaus zu einem Programm, n�mlich
> zu dem Prozess mit der PID [nummer]. Deswegen stehen sie in
> /proc/[nummer]/maps .
> Sie geh�ren lediglich nicht zu einer bestimmten Datei, sondern wurden
> zur Laufzeit des Programmes dynamisch alloziiert. Die ersten beiden
> Zeilen geben dagegen Speicherbereiche an, die direkt aus einer Datei
> in den Speicher gemappt werden.

Woraus ich nun schliesse, dass die Speicherbereiche nicht mehr ben�tigt 
w�rden, aber weiterhin reserviert bleiben. Irre ich mich da?

> Die Summe der Speicherbereiche aus allen /proc/*/maps Eintr�gen
> �bersteigt den real verf�gbaren Speicher bei weitem. Das liegt u.a.
> daran, dass viele Prozesse die selbe Bin�rdatei und/oder Library
> benutzen. Dieser Speicher wird dann physisch nur einmal belegt, aber
> in die Adressr�ume mehrere Prozesse gemappt.

Das ist ein sehr intelligentes Verhalten. In diesem Fall ist der 
angegebene Speicherbereich (oben 080e8000-08301000) ein virtueller Wert? 
Wo sehe ich den tats�chlich belegten Speicherbereich pro Programm?

Eigentlich h�tte ich ja nur gerne eine Ansicht, wie ich sie aus dem 
Prozessmanager in Windows XP kenne. Pro Programm den ben�tigten 
Speicherbereich, so dass ich beurteilen kann, wer wieviel Speicher 
verbraucht.

Herzlichen Dank!
Johannes
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads