Hallo Liste,
da ich einige Tage offline war (erst Rücken- dann Blitzschaden), hatte ich (zu) viel Zeit zum Denken. Dabei hatte ich folgenden Gedankengang: Für gewisse Anwendungen ist Ajax ja eigentlich eine ganz spannende Sache. Ich bin zwar alles andere als ein Javascript-Fan, aber in diesem Fall hilft es ja z.B. das Volumen an zu übertragenden Daten zwischen HTTP-Server und -Client zu reduzieren, da nicht immer eine ganze Webseite, sondern nur bestimmte Daten übertragen werden müssen (ein nettes Beispiel ist der "Diesen Artikel beobachten"-Button bei eBay). Außerdem können die asynchronen Requests spezialisierte Skripte aufrufen, da eben keine ganze Webseite, sondern z.B. nur ein einzelner Datensatz aus einer Datenbank benötig wird. D.h. die Request-Bearbeitung ist auch etwas schlanker. Nun gibt es ja aber Seiten, die so tun, als wären Sie (Achtung, Buzzword) "Rich Clients" und daher permanent den Server befragen, ob irgendein Ereignis zu verarbeiten ist. Quasi simulieren die damit GUI-Events durch Polling. Das klingt ja an sich schon nach großem Mist, da ja doch wieder unnötige Daten übertragen werden.
Hier nun meine Frage(n) an die Webserver-Cracks (und damit der Bogen zum zweiten Teil des Subjects):
Belegt damit der Client nicht permanent einen httpd-Prozess für das Polling? Oder wird das z.B. vom Apache irgendwie effizienter abgewickelt? Ansonsten dürften ja einige wenige dutzend Benutzer den Webserver an seine Speichergrenzen treiben, wenn da soviele httpds beschäftigt sind, oder nicht? Oder ist das genau der Grund, warum Java-Applicationsserver mit ca. 400 Trillionen Gigabyte RAM ausgestattet werden? Oder versteh ich da was falsch? Und warum schlägt der Blitz immer in "meine" Telefonleitung?
Fragende Grüße Eric
Hallo Eric!
Nun gibt es ja aber Seiten, die so tun, als wären Sie (Achtung, Buzzword) "Rich Clients" und daher permanent den Server befragen, ob irgendein Ereignis zu verarbeiten ist. Quasi simulieren die damit GUI-Events durch Polling. Das klingt ja an sich schon nach großem Mist, da ja doch wieder unnötige Daten übertragen werden.
Belegt damit der Client nicht permanent einen httpd-Prozess für das Polling? Oder wird das z.B. vom Apache irgendwie effizienter abgewickelt? Ansonsten dürften ja einige wenige dutzend Benutzer den Webserver an seine Speichergrenzen treiben, wenn da soviele httpds beschäftigt sind, oder nicht?
Richtig. Es kommt auf die Keepalive-Time des Apache an. Wenn der wie in der Standardeinstellung 30 Sekunden wartet, ob der Client noch etwas will, wird für jeden User ein Apache fällig. Hat der Apache dann noch die ganzen Module und PHP-Interpreter, sind 15-20 MB RAM pro Person am Arsch.
Thomas
Hallo Thomas,
Thomas Schmidt wrote:
Hallo Eric!
Nun gibt es ja aber Seiten, die so tun, als wären Sie (Achtung, Buzzword) "Rich Clients" und daher permanent den Server befragen, ob irgendein Ereignis zu verarbeiten ist. Quasi simulieren die damit GUI-Events durch Polling. Das klingt ja an sich schon nach großem Mist, da ja doch wieder unnötige Daten übertragen werden.
Das ist immer das Problem bei Polling. Aber es ist eben eine einfache Lösung, um gewissen Dinge möglich zu machen, wenn zum Beispiel die Gegenrichtung (Server-Push gibt's ja auch bei HTTP, aber das ist in dem Zusammenhang eher schwierig umzusetzen und vor allem nicht so breit von den Browsern unterstützt) nicht so ohne weiteres machbar ist...
Belegt damit der Client nicht permanent einen httpd-Prozess für das Polling? Oder wird das z.B. vom Apache irgendwie effizienter abgewickelt? Ansonsten dürften ja einige wenige dutzend Benutzer den Webserver an seine Speichergrenzen treiben, wenn da soviele httpds beschäftigt sind, oder nicht?
Richtig. Es kommt auf die Keepalive-Time des Apache an. Wenn der wie in der Standardeinstellung 30 Sekunden wartet, ob der Client noch etwas will, wird für jeden User ein Apache fällig. Hat der Apache dann noch die ganzen Module und PHP-Interpreter, sind 15-20 MB RAM pro Person am Arsch.
Das ist allerdings jetzt wieder nur die Hälfte der Wahrheit, weil zum Beispiel Linux auch beim fork() ein Copy-On-Write macht. Wenn da ein Apache "theoretisch" mit 15 MB zu Buche schlägt, aber die Mehrzahl der Module garnicht benutzt wird, dann sieht der Prozeß zwar groß aus, aber im Prinzip hat der zugehörige Prozeß statt einer ganzen Speicherseite im Hauptspeicher nur einen Verweis auf dieselbe Speicherseite des Parent-Prozesses (bis eben in dem Bereich geschrieben wird, dann wird die Seite kopiert). Da wird nicht ganz so viel gebraucht, wie es zunächst den Anschein hat. Es ist dann halt die Frage, was die Requests dann so an Speicher wirklich beschreiben und was nicht...
Thomas
Ciao, Thomas
Hi Eric,
Hier nun meine Frage(n) an die Webserver-Cracks (und damit der Bogen zum zweiten Teil des Subjects):
Belegt damit der Client nicht permanent einen httpd-Prozess für das Polling?
Je nach keep-alive, aber im Prinzip ja.
Oder wird das z.B. vom Apache irgendwie effizienter abgewickelt?
Der Apache kennt mehrere Arbeitsverteil-Algorithmen. Es gibt auch welche, die nicht einen Prozess/HTTP-Verbindung benötigen.
Ansonsten dürften ja einige wenige dutzend Benutzer den Webserver an seine Speichergrenzen treiben, wenn da soviele httpds beschäftigt sind, oder nicht?
Nein. Die httpds nutzen diversen RAM zusammen, z.B. das Apache-Binary mitsamt allen Modulen liegt immer nur einmal im RAM - egal ob da ein oder eintausend httpds ackern. Je nach Config kann man etwa mit 1 MB/httpd zusätzlich rechnen.
Oder ist das genau der Grund,
Nein, die machen das genauso wie der Apache (shared mem).
warum Java-Applicationsserver mit ca. 400 Trillionen Gigabyte RAM ausgestattet werden?
Nicht nur Java-Applicationserver fressen RAM ... Am Ende läuft das auf die Preisfrage hinaus: Was kostet mehr: 20 GB RAM zusätzlich für 10 Server oder 200 Arbeitsstunden zusätzlich für 10 böse Speicherschutzverletzungen?
Viele Grüße Fabian
Hallo Fabian!
Der Apache kennt mehrere Arbeitsverteil-Algorithmen. Es gibt auch welche, die nicht einen Prozess/HTTP-Verbindung benötigen.
Und wie aktiviert man die?
Nein. Die httpds nutzen diversen RAM zusammen, z.B. das Apache-Binary mitsamt allen Modulen liegt immer nur einmal im RAM - egal ob da ein oder eintausend httpds ackern. Je nach Config kann man etwa mit 1 MB/httpd zusätzlich rechnen.
Meine Apache2s mit PHP5-Modul haben pro Thread 10-11 MB ohne Last. Wie bekommt man die runter?
Thomas
Hallo Thomas,
On Thu, Apr 17, 2008 at 1:41 PM, Thomas Schmidt lug-dd@netaction-server.de wrote:
Und wie aktiviert man die?
$ aptitude search apache2-mpm ... p apache2-mpm-event - Event driven model for Apache HTTPD p apache2-mpm-itk - multiuser MPM for Apache 2.2 ... p apache2-mpm-prefork - Traditional model for Apache HTTPD i apache2-mpm-worker - High speed threaded model for Apache HTTPD
Installiere einfach den richtigen.
Viele Grüße, Torsten
Hallo!
Und wie aktiviert man die?
$ aptitude search apache2-mpm ... p apache2-mpm-event - Event driven model for Apache HTTPD p apache2-mpm-itk - multiuser MPM for Apache 2.2 ... p apache2-mpm-prefork - Traditional model for Apache HTTPD i apache2-mpm-worker - High speed threaded model for Apache HTTPD
Installiere einfach den richtigen.
Prefork ist besagte mit viel Verbrauch, worker kennt kein PHP-Modul. Den RAM der Apache2s zu senken und dafür bei PHP-CGI wieder draufzuschlagen kann es wohl nicht sein. Was sagt mir das also?
Thomas
On Thu, Apr 17, 2008 at 2:52 PM, Thomas Schmidt lug-dd@netaction-server.de wrote:
Prefork ist besagte mit viel Verbrauch, worker kennt kein PHP-Modul.
Ja, PHP ist broken.
Was sagt mir das also?
Das du kein PHP verwenden willst. ;-)
Viele Grüße, Torsten
Fabian Hänsel schrieb:
Nicht nur Java-Applicationserver fressen RAM ... Am Ende läuft das auf die Preisfrage hinaus: Was kostet mehr: 20 GB RAM zusätzlich für 10 Server oder 200 Arbeitsstunden zusätzlich für 10 böse Speicherschutzverletzungen?
Prinzipiell stimme ich Dir da zu, aber in Deinem Beispiel skaliert das beheben der 10 Segfaults deutlich besser, als der Zukauf von Speicher. 200 Arbeitsstunden kosten 20.000 €, während 200 GB RAM nur 12.000 € kosten. Verdoppelt sich die Anzahl der Besucher, kosten die zusätzlichen Arbeitstunden 0 €, während die weiteren 200 GB RAM nochmal 12.000 € kosten. Preise ohne Gewähr. ;-P
Schelmische Grüße Eric
Eric-Alexander Schaefer eric@gixgax.de wrote:
Fabian Hänsel schrieb:
auf die Preisfrage hinaus: Was kostet mehr: 20 GB RAM zusätzlich
^^
für 10 Server oder 200 Arbeitsstunden zusätzlich für 10 böse Speicherschutzverletzungen?
das beheben der 10 Segfaults deutlich besser, als der Zukauf von Speicher. 200 Arbeitsstunden kosten 20.000 €, während 200 GB RAM nur
^^^
12.000 € kosten.
^
Preise ohne Gewähr. ;-P
Nullen auch? }:->
Davon abgesehen machen bei DB-lastigen Anwendungen mit Stored Procedures die Java-Sachen hin und wieder gar nicht mehr den größten Teil aus (v.a. wenn SSL im Spiel ist - das frisst _richtig_ CPU).
Viele Grüße Fabian
lug-dd@mailman.schlittermann.de