phpbar.de logo

Mailinglisten-Archive

[php] Till: wie performant ist phpChat?

[php] Till: wie performant ist phpChat?

Till Gerken tig_(at)_skv.org
Wed, 23 Feb 2000 15:06:19 +0100


> Wie performant ist das phpChat an dem du arbeitest?
> es nimmt auch einträge in der Datenbank für jede gechattete Zeile vor..
> wie viele Benutzer können gleichzeitig darin chatten?
> Wann kracht das ganze system vor Überlastung zusammen?
> Hast du schon erfahrungen mit konkreten Zahlen gemacht`?

Ich gehe jetzt einmal davon aus, daß PHP4 läuft und Shared Memory
unterstützt wird.

phpChat nimmt in dem Fall praktisch keine CPU-Zeit in Anspruch, da hier
solange sleep() aufgerufen wird, bis das Inputfeld signalisiert, daß eine
neue Nachricht auszugeben ist. Daraufhin bricht der Prozeß aus seiner
Idleschleife aus und stellt dann erst eine Datenbankabfrage, d.h. es tritt
tatsächlich nur bei Bedarf Datenbanktraffic auf.

Andersherum verhält es sich genauso, solange keine Nachrichten von anderen
Usern (also aus dem Chatnetzwerk) darzustellen sind, bleibt der Prozeß in
einem sleep(). Bleiben für eine bestimmte Zeit externe Nachrichten aus, wird
ab und zu eine Art "Ping" an den Browser versandt, um Timeouts auf der
Clientseite zu vermeiden.

Sowohl httpd und MySQL-Prozesse werden in top mit 0% bis max. 1% (in
Extremfällen) CPU-Beanspruchung angezeigt. (Konfiguration s.u.)

Probleme macht hauptsächlich ein nicht ganz fehlerfreies PHP: ab und zu
startet PHP Prozesse, die volle CPU-Belastung ziehen - dies war vor allen
Dingen mit PHP 3 der Fall, ist jedoch in PHP 4 weitestgehend behoben. Bei
der jetzigen Installation ist mir bis jetzt noch kein wildgewordener Prozeß
wieder unter die Finger gekommen.

Die Apacheprozesse sind jedoch recht groß, pro Client wird ein Prozeß, also
ca. 1-2MB an RAM benötigt. Je nach freien Systemressourcen variiert also die
mögliche Anzahl von Clients. Auf dem Testserver, ein PIII mit 128MB, Linux
(jedoch mit nicht allzuviel freiem Speicher), waren ca. 25 Clients möglich,
bis der Server anfing aus dem Swap zu fahren und langsam abstarb.

Ich denke mal, pro zusätzlichem 128MB-Riegel sind mindestens 50 Clients
problemlos drin, eine maximale Useranzahl gibt es nicht. Hochfrequentierte
IRC-Server halten locker 2000-3000 User aus, steckt man da 5GB RAM in den
Server, ist der Betrieb von phpChat kein Problem.

Der Vorteil von phpChat liegt in der Skalierbarkeit, denn nur lokale Clients
benötigen lokalen Speicher. Während der Laufzeit können dynamisch weitere
Server hinzugebunden werden, ohne die anderen Server neu zu starten o.ä.
Clients, die von den anderen Servern behandelt werden, werden transparent
auch auf jedem anderen Server gespiegelt (einer der Vorteile von IRC). Diese
externen Clients benötigen weder Rechenzeit noch Speicherplatz, womit quasi
ganze Netzwerkstränge nach Gusto "gemountet" werden können, ohne Nachteile
am eigenen Server in Kauf nehmen zu müssen.

(N.B.: Wann gibts die Usergruppe "phpChat-Net"? :) )

Ohne Shared Memory muß phpChat immer wieder die Datenbank anhauen, um
nachzuschauen, ob neue Nachrichten da sind. Dies geschieht in predefinierten
Zeitintervallen, je größer man den Zeitintervall einstellt, desto weniger
Ressourcen verbraucht phpChat (sowohl im httpd-Prozeß als auch in Folge im
MySQL-Prozeß), jedoch desto langsamer erfolgt auch die Ausgabe.

Ich habe mittlerweile allerdings ein Pluginsystem fertiggestellt, mit dem
man komplett seine eigenen Module für phpChat schreiben kann, nicht nur für
interne Erweiterungen sondern auch für den Datenbanksupport.

Wer also möchte, kann sein phpChat auf das Dateisystem umbiegen, ganz im
Speicher arbeiten lassen oder wo auch immer (diese Module muß man sich dann
allerdings zum derzeitigen Zeitpunkt noch selber schreiben)

Ich hoffe, damit alle Fragen beantwortet zu haben, ansonsten bitte nochmal
nachhaken. :)

Till




php::bar PHP Wiki   -   Listenarchive