Hi!
sorry, musste The Ring sehen gehen ;)
naja, diesmal lasse ich es noch durchgehen ;-)
Und zwar generiere ich ein HTML-Dokument mit 100.000 Bildern:
for($i=1; $i<100000;$i++) {
$str .= <<<EOT
<img src="http://localhost/x.g?i=$i">
EOT;
}Hast du bemerkt, da hast du das selbe Problem, was dich auch vom Apachen wegbringt!
Nein. Mit obigem Code generiere ich ein html-Dokument, das speicher eich ab und rufe es im Browser über den Apachen auf. Und wegen ?i=$i wird für jedes Bild ein eigener Request gesendet und vom Apachen geloggt, ich erhalte also Einträge in meiner Access.log, in der ich sehr schön die Requests pro Sekunde ablesen kann. Und da der Apacher sich weniger als 15% der zur Verfügung stehenden Performance genehmigt, und der Mozilla den ganzen Rest, gehe ich davon aus das der Apache noch deutlich leistungsfähiger ist, nämlich in dem Fall das der Mozilla nicht auf dem gleichen Rechner läuft, sondern die Requests von der Netzwerkkarte kommen, die brucht kaum Performance also kann der Apache sich bedienen.
Der Browser ist ebenfalls nicht für diese "Anwendung" zu gebrauchen, da auch er nicht
für das Ziel optimiert ist. Ich bin mir sicher, dass du mit einem prefork C-Script
noch mehr rausholen könntest...
Ganz sicher sogar, nur bedenke das ich mit der Methode fast 10 mal so viele Request bekommen habe wie mit unseren Perl-Versuchen damals, wobei das Perl-Script nucht gegen localhost ging, was das ganez aber durch fork nicht verlangsamen sollte, oder?
Nur, und das wirst du dir wohl auch überlegt haben,
ist dies die einfachste Testmethode, wenn man sich nicht gleich an C wendet, das stimmt.
Zudem ist der Fehler dieser Methode doch schon sehr hoch... Um genau zu messen müsstest
du genau wissen, was deine Programme machen, das kannst du beim Browser nur nicht.
Wieso? Der Broswer läd erstmal dei html-Seite, und dann stehen da 100.000 Bilder mit verschiedenen Quelen drin(?i=$i), die alle per HTTP-Request runterheladn wrden müssen. Der Apache loggt dann jeden Request mit Sekundengenauer Zeitangabe. Aber hast schon recht, ich muß das über das LAN machen um etwas realistischere Daten zu bekommen.
Über das Internet kann ich schlecht was machen wegen 16KB upsteam,das sind gerade mal 16 Requests pro Sekunde :( Jetzte verstehe ich auch wieso das von meinem Rechner damals so langsam war.... ;-)
Der Apache hat sich mit 10-15 &CPU und 2-3MB RAM begnügt. Heißt das der Apache kaum Arbeit dabei hatte!
Tja, da haben wir's, du hast die Geschwindigkeit des Browsers gemessen, nicht die des
Apachen ;)
Wieso? Ich habe in den acccess.logs gemessen. Der Engpass war die Performance des Browsers,daher schloss ich daraus das der Apache mehr schafft, wieviel muß ich im LAN testen.
Aber welchen Browser könnte ich besser verwenden?
lynx? - Vielleicht ist der etwas schneller... Oder aber gar keinen, da wirklich nicht
sehr für das Problem geeignet.
Zumal lynx keie Bilder darstellen kann, udn so vermutlich <img src=... ignoriert, zumindest keien Request sendet, warum auch wenn er es nicht darstellen kann. Außerdem suche ich was für Windows. Wobei, ich könnte einfach eien .url Datei oder sowas anlegen, das ist glaube ich ein bookmark, den der Internet-Explorer direkt öffent, ich vermute das der IE besonder schnell ist da er sehr vieel Recourcen von Win nutzen wird!
Kennt jemand einen besonders schnellen Browser? Opera? Sollte unter Linux laufen, wobei ich das evtl im Lan probieren könnte, das ganze auf 10 Windows-Rechner verteilt, dann bekomme ich schon ne nette Rate denke ich.
IMHO die einzige Lösung, die Request-Starter dürfen sowieso nicht auf demselben Rechner
sein, da dies das Messergebnis SEHR stark beeinflusst.
In wiefern? Der Apache wurde nur duch den Mozilla ausgebremst, um umgekehrt ein wenig.
Das Messergebnis ist auf keinen
Fall signifikant, wenn beide Anwendungen auf demselben Rechner laufen.
Stimmt, aber es sagt mir das locker übe 1000 Requests drin sind. Eien Maxumalwert habe ichdamit sicher nicht gefunden, aber das habe ich ja von Anfang an gesgagt da der Mozilla den großen Teil der Performance gefressen hat ;-)
Noch ein Punkt. Wenn ich im LAN mal so einen Lasttest ausführen will, wie schaffe ich es auf 10 Rechnern(WIn2K) die Browser gleichzeitig dazu zu bewegen, eine Seite aufzurufen?
Ein Prozess, der die "Request-Starter-Prozesse" auf den anderen Rechnern startet.
Und im LAN? Da hat nicht jeder Rechner eine Webserver. Wi eereiche ich denn dei Scritpe oder Kommandozeile auf den verschidenen Rechnern(Windows!)?
So,
wie wir dies damals gemacht haben.
Wurden die Scrpte automatisch gestartet? Wie wurde das genau initiiert? Haben die an einem Socket gelauscht? Kan ich mir nicht vorstellen, da macht kein Provider sicher nicht mit ;-)
Wahrscheinlich schon, aber warum nicht so, wie wir dies damals gemacht haben, ist IMHO
schnell umzusetzen und erzielt akzeptable Ergebnisse (100ms Verzögerung, is OK, oder?).
Ich muß0 mir die Scripte nochmal angucken, weiß gerade nicht mehr mwie das gemacht wurde, mit dem Teil des Scripte habe ich mich auch nicht beschäftigt. Nur, bedenke das es alles windows-maschinen sind, dei alle kein Perl installiert haben, aber das kann man ja ändern, nur damit ist es nicht mehr ganz so einfach ;-) Das ist ja der Vorteil von C, das läfut so!
PS: Sorry wegen meiner ständigen Rechtschreibfehler, ich bin so faul...
Das ist ein FORUM, solange du so schreibst, dass man es versteht (und dem ist natürlich
so) ;)
Trotzdem ärgert es mich im nachhinein immer, und ich bin fast der einzige der so schreibt, man könnte meinen ich sei Legasteniker ;-)
Vielen Dank für Deine wie immer interessanten und ausführlichen Antworten, und viele Grüße
Andreas