Halihallo Andreas
sorry, musste The Ring sehen gehen ;)
Eine Idee: ich mißbrauche den Browser dafür ;-)
Och, der Arme... Das Lasttier Browser...
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!
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... 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.
Das öffne ich im Browser und nutze so die Leistung des Browsers. Direkt probiert, auf lokalhost erreiche ich kurzzeitig 400-600 Requests pro Sekunde! Das ist doch schonmal was. Nur reicht das nicht. Ich denke der Mozilla ist nicht wirklich gut geeignet, hat sich direkt über 100MB Ram geschnappt und 80-90 % CPU. 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 ;)
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.
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. Das Messergebnis ist auf keinen
Fall signifikant, wenn beide Anwendungen auf demselben Rechner laufen.
Aber ich habe auch mal weitergedacht. Ein Request-Header hatte 807 Byte und war wirklich so klein wie möglich. Sagen wir mal 1 KB * 500 pro Sekunde, heißt 30 MB pro Minute - Traffic und Festplatte. An einem Tag kommt man da ja auf über 7 GB! Mit dem Resonse-Header, hieße 10 GB pro Tag, sind 300 GB pro Monat, nur für das bisschen. In der Praxis wird man da nicht hinkommen, und wenn ich davon ausgehe das der Apchebei guter Konfiguration(halt auf schnell getrimmt, was meiner nicht ist, da ist ne Menge einkompiliert und ich habe keine Ahnung von vielen Parametern), ich denke der Apache würde sicher 2000 Requests pro Sekunde schaffen, vielleicht sogar mehr, dann sind wir schon satt im Tera-Byte Bereich pro Monat. Also alles in allem, der Apache ist sicher schnell genug. Nur wenn ich direkt eine Verarbeitungs-Routine mit einbauen wollte, also nicht die Apache-Logs verwende sondern irgendwas von PERL, dann wird es wohl erheblich langsamer, nur wenn ich die Daten per Cronjob bearbeite, 8 GB, also 10 Mio Datensätze, das dauert sicher ne Zeit, kann ich überhaupt nicht einschätzen, kommt wohl drauf an was ich alles damit machen will.
Ein anderer wichtiger Gedanke! - Daran hatte ich gar nicht gedacht ;)
Noch ein Engpass ist die Internetanbindung. Bei angenommenen 2000 Requests a 1000 Byte komme ich nichtmal mit ner 10 Mbit Leitung aus, ich kenne die Abstufungen nicht, aber so eine Anbindung ist schon ein nettes Kaliber, denn wenn ich mich nicht irre geht das nicht mehr mit SDSL, sondern braucht ne "richtige" Leitung, ich glaube das nächste ist eine 100Mbit Ethernet-Anbindung, gibt es IMHO auch zu Providern. Braucht dann aber auch eine entsprechende Infrastruktur und das ist das teure, ganz zu schweigen vom Traffic, wenn man 0,5 Cent pro MB zahlt(was IMHO sehr günstig wäre), läge man bei 2 TB bei 10.000 EUR! Naja genug der Spinnerei ;-)
s. oben ;)
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. So,
wie wir dies damals gemacht haben.
Nur wie bekomme ich die Zeiten gleich? Kann ich Windows auch über einen Zeitserver synchronisieren?
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?).
Naja, Fragen über Fragen... ich find sowas irgendwie immer interessant ;-) Und das meiste lerne/bemerke ich während ich ein Posting schreibe ;-)
Genau!
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) ;)
Viele Grüsse
Philipp