[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Content Management System für private Homepage?



Am Monday 31 January 2011 schrieb Christian Stubbs:
> Martin Steigerwald <Martin@lichtvoll.de> writes:
[...]
> > Und dann schaue ich mal, ob einer der Apaches wirklich 20 MB
> > verbraucht:
> > 
> > mondschein:~> for P in $(pidof apache2); do pmap -d $P | tail -1 ;
> > done mapped: 22476K    writeable/private: 4820K    shared: 568K
> > mapped: 22764K    writeable/private: 5108K    shared: 568K
> > mapped: 22796K    writeable/private: 5140K    shared: 568K
> > mapped: 22828K    writeable/private: 5172K    shared: 568K
> > mapped: 23088K    writeable/private: 5432K    shared: 568K
> > mapped: 23056K    writeable/private: 5400K    shared: 568K
> > mapped: 22992K    writeable/private: 5336K    shared: 568K
> > mapped: 23080K    writeable/private: 5424K    shared: 568K
> > mapped: 22828K    writeable/private: 5172K    shared: 568K
> > mapped: 23088K    writeable/private: 5432K    shared: 568K
> > mapped: 22344K    writeable/private: 4688K    shared: 568K
> 
> Ist das ein frisch gestarteter oder schon länger laufender Apache?

Die müssten schon länger laufen. Im Grunde seit dem ich den Server das 
letzte mal neu startete, also vor 89 Tagen. Und das Neustarten, um 
mögliche Speicherlecks zurückzusetzen, macht Apache ja glaub mittlerweile 
nicht mehr in der Standard-Konfiguration. Ich hab den Dienst, soweit ich 
mich erinnere, nicht neu gestartet.

> Ein frisch gestartetet Apache mit mod-php sieht bei mir z.B. so aus:
> :~# for P in $(pidof apache2); do pmap -d $P | tail -1 ; done
> 
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 151096K    writeable/private: 3944K    shared: 0K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 151092K    writeable/private: 3944K    shared: 0K

Interessant, bei Dir fordern die Apache's im Durchschnitt mehr Adreßraum 
an, als bei mir. Vielleicht weitere zusätzliche Apache-Module, die ich 
nicht nutze?

> Und nach ein paar Seitenaufrufen, wenn der PHP-Code nachgeladen wurde:
> :~# for P in $(pidof apache2); do pmap -d $P | tail -1 ; done
> 
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 323552K    writeable/private: 21336K    shared: 576K
> mapped: 322948K    writeable/private: 20732K    shared: 576K
> mapped: 322960K    writeable/private: 20744K    shared: 576K
> mapped: 323552K    writeable/private: 21336K    shared: 576K
> mapped: 322952K    writeable/private: 20736K    shared: 576K
> mapped: 324572K    writeable/private: 22356K    shared: 576K
> mapped: 323656K    writeable/private: 21440K    shared: 576K
> mapped: 151096K    writeable/private: 3944K    shared: 0K
> mapped: 312532K    writeable/private: 10316K    shared: 576K
> mapped: 151092K    writeable/private: 3944K    shared: 0K
> 
> Sind ein paar Prozesse mehr und einige sind von 10MB auf 20MB
> gewachsen. Insgesamt ca. 250MB für ca. 20 Prozesse/Connections.

*Wenn* die Apache-Prozesse den angeforderten Adreßraum auch komplett 
belegen. Da wäre mal interessant, ein free -m vorher und nachher, um 
zumindest mal einen groben Anhaltspunkt zu bekommen, inwieweit die 
Prozesse den angeforderten Adreßraum auch tatsächlich nutzen. Die 
gemeinsam genutzten Bibliotheken spielen meines Erachtens für unsere Frage 
im Moment keine so große Rolle.

Aber zumindest haben sie mal mehr Adreßraum angefordert, als bei mir.

Nun es kommt natürlich auch immer darauf an, was die PHP-Skripte machen. 
Das Zeug, was ich laufen lasse, ist im großen und ganzen ein simpler 
Ersatz für Server Side Includes. Also auch nicht so ganz realistisch für 
typische CMS, wie ich offen zugebe ;).

> Zum Vergleich mal eine Site mit mpm-worker mit 10 Threads pro Prozess
> 
> und fcgid direkt nach dem Start:
> :~# for P in $(pidof apache2); do pmap -d $P | tail -1 ; done
> 
> mapped: 39432K    writeable/private: 27556K    shared: 832K
> mapped: 14292K    writeable/private: 3024K    shared: 320K
> mapped: 14104K    writeable/private: 3156K    shared: 0K
> mapped: 14804K    writeable/private: 3024K    shared: 832K
> 
> * keine php Prozesse
> 
> Und nach ein paar Seitenaufrufen:
> :~# for P in $(pidof apache2); do pmap -d $P | tail -1 ; done
> 
> mapped: 39432K    writeable/private: 27556K    shared: 832K
> mapped: 40976K    writeable/private: 29100K    shared: 832K
> mapped: 14292K    writeable/private: 3024K    shared: 320K
> mapped: 14104K    writeable/private: 3156K    shared: 0K
> mapped: 14804K    writeable/private: 3024K    shared: 832K
> 
> Hier noch das PHP:
> :~# for P in $(pidof php5); do pmap -d $P | tail -1 ; done
> 
> mapped: 34468K    writeable/private: 13060K    shared: 0K
> mapped: 38076K    writeable/private: 16668K    shared: 0K
> 
> Also insgesamt ca. 100MB für ca. 20 Prozesse/Connections.

Wieder ist das abhängig, inwieweit die Prozesse den Adreßraum nutzen.

Linux ist in der Standard-Einstellung ein ziemlicher Hochstapler, was 
Speicher-Anforderungen angeht. Prozesse fordern zudem nicht Speicher, 
sondern Adreßraum an, wenn man es genau nimmt. Der Linux Kernel gibt da 
durchaus mehr virtuellen Adreßraum raus, als er physikalisch mit 
Hauptspeicher und Swap abbilden kann. Und hofft, dass die Prozesse den 
Adreßraum schon nicht komplett nutzen, also beschreiben werden.

Dann gibts natürlich noch Unterschiede. Anon Pages kann der Kernel nicht 
einfach so wegschmeissen, das ist Speicher, den Prozesse für sich nutzen 
und keine in den Speicher gemappte Datei usw. Änderungen an Pages von mit 
mmap() in den Speicher gemappten Dateien kann der Kernel natürlich wieder 
aufs Dateisystem rausschreiben.

Aber oberflächlich betrachtet, sieht es in der Tat so aus, als brauche 
Apache mit FastCGI für PHP weniger Speicher als mit mod-php. Was ich ja 
auch nicht in Abrede stelle und was mich auch nicht wirklich wundert, wenn 
es denn tatsächlich so ist.

> Wie du allerdings schreibst, kann das ganze auch hinfällig sein, wenn
> bei den Prozessen signifikant mehr Code zwischen den Prozessen geteilt
> wird, als die Angabe "shared" suggeriert.

Am interessantesten ist hier noch die Angabe unter writable/private. Das 
sind Pages, die nur für den Prozess sind. Inwiefern der Prozess alle Pages 
nutzt, ist damit aber noch nicht raus. Und wenn ich das richtig summiert 
hast, hast Du oben Dich ja auch auf diese Angabe bezogen.

Mittlerweile gibt es im Kernel bessere Möglichkeiten. Der Kernel stellt in 
/proc zusätzliche Informationen bereit. Weiß aber nicht mehr ob das nun in 
der Datei "smap", "map" und/oder "pagemap". Ich denke aber, dass der 
Memory Resource Controller, der sich optional im Kernel aktivieren läßt, 
genauere Auskünfte über den tatsächlich genutzten Speicher gibt. Da gibts 
dann ein CGroup-Dateisystem mit so Dateien wie "memory.usage_in_bytes".

> Da bin ich dann mit meinen Profiling-Kenntnissen am Ende und muss dir
> glauben. :)

Das musst Du nicht. Es steht Dir frei, Dich selbst zu informieren und 
nachzuprüfen, was ich hier so von mir gebe. Ich bitte sogar darum. Ich 
versuche zwar lieber zu sagen, dass ich keine Ahnung habe, wenn es so ist, 
aber es passiert mir trotzdem sicherlich auch immer wieder mal, dass ich 
was vom Mond erzähle ;).

Ciao,
-- 
Martin 'Helios' Steigerwald - http://www.Lichtvoll.de
GPG: 03B0 0D6C 0040 0710 4AFA  B82F 991B EAAC A599 84C7

Attachment: signature.asc
Description: This is a digitally signed message part.


Reply to: