Archiv verlassen und diese Seite im Standarddesign anzeigen : Windows Tool um Perfomance einer Seite zu messen
Lennynero 29-01-2010, 11:32 Hallo,
ich bin gerade dabei zwei Varianten eines Skriptes zu vergleich. Da ich dabei in der einen Lösung htaccess Funktionalitäten nutze und sie in der anderen Variante nur mit PHP löse, fällt ein einfacher Timestamp mit microtime schonmal aus.
Auch mit wget komme ich nicht ans Ziel, denn der Server, auf dem PHP arbeitet, kann die URL nicht auflösen (wohl kein DNS Anschluss).
Ich suche nun ein kleines Tool, das eigentlich nichts anderes macht als mir eine bestimmt URL mehrmals aufzurufen und mir dann mitteilt, wie lange es gedauert hat bis die Seite da war. Ich weiss sehr wohl, dass die Werte kein Garant sind, da noch andere Faktoren als die beiden Skriptvarianten eine Rolle spielen, jedoch möchte ich zumindest ausschliessen, das es zu massiven Verschlechterungen in der PHP Variante kommt (die, im Falle einer massiven Verschlechterung, keine Option mehr wäre).
Gruss,
Lenny
AmicaNoctis 29-01-2010, 11:39 Dann verschieb ich das mal zu den Skriptgesuchen.
BTW: Kannst du nicht lokal ein kleines PHP-Skript schreiben, welches das mit cURL erledigt?
Lennynero 29-01-2010, 11:45 Ohne das jetzt getestet zu haben (werde ich gleich nachholen):
Dürfte da nicht auch die fehlende DNS-Verbindung das Problem sein?
Mea Culpa... lokal... da werde ich mal XAMPP anwerfen, da ich idR direkt in der Testumgebung arbeite habe ich nicht daran gedacht!
AmicaNoctis 29-01-2010, 11:49 Dürfte da nicht auch die fehlende DNS-Verbindung das Problem sein?
Das verstehe ich grad nicht. Wieso hast du kein DNS auf deinem Computer? Wie kommst du dann überhaupt auf Webseiten (z. B. diese hier) drauf?
Lennynero 29-01-2010, 15:07 Das verstehe ich grad nicht. Wieso hast du kein DNS auf deinem Computer? Wie kommst du dann überhaupt auf Webseiten (z. B. diese hier) drauf?
Wie im Edit erwähnt: ich war mit dem Kopf auf dem Entwicklungsserver und habe das lokal erst gar nicht beachtet.
Hier das Skript mit dem ich jetzt eine rudimentäre Überprüfung gemacht habe. Es gewinnt sicherlich keinen Schönheitspreis und die Ergebnisse sind sicherlich nicht supergenau, aber zumindest eine Annäherung, bzw. wird zumindest eine Tendenz gezeigt (im meinem Falle den, das es keine signifanten zeitlichen Unterschied zwischen den beiden Varianten gibt).
Um die Webseite zu lesen habe ich file() genommen (alternativ ging auch fopen()), das Ganze in eine Schleife gesetzt und um den Timeout zu umgehen lasse ich die Seite sich selbst laden (Übergabe der Werte von Seite zu Seite hätte man auch mit einer Session machen können, allerdings hätte man da den Zähler zurücksetzen müssen (Sessioncookie löschen oder ein kleines Skript zum Löschen schreiben), falls das Skript mal nicht bis zum Ende gelaufen wäre (Timeouts und Umleitungsmaximum sind mir beim Testen mehrmals untergekommen :) ).
if(!isset($_GET['counter']))
{
$int_counter = 1;
}
else
{
$int_counter = (int) $_GET['counter'];
}
if(isset($_GET['times']))
{
$arr_time = explode(",", $_GET['times']);
}
/**
* Wie oft laden wir die Seiten (20 scheint die Maximale Anzahl
* an Weiterleitungen zu sein, mehr macht mein Apache nicht)
*/
$int_tries = 20;
//Wie oft versuchen wir pro Seitenaufruf die Seiten zu laden
$int_loops = 5;
//Welche Seiten sollen aufgerufen werden?
$arr_pages = array(
'http://www.google.de',
'http://www.spiegel.de',
);
$arr_times = array();
//Hier geht die Messung los
$time_start = microtime(true);
for($j = 1; $j <= $int_loops; $j++)
{
foreach($arr_pages as $url)
{
$handle = file ($url);
//Alternativ:
#$handle = fopen ($url, "r");
}
}
$arr_time[] = microtime(true) - $time_start;
//Hier endet die Messung
if($int_counter == $int_tries)
{
$i = 0;
//Ausgabe der Einzelmessungen und des Gesamtergebnisses
foreach($arr_time as $time)
{
$i++;
echo $i . " " . $time . "<br/>";
$sum_time += $time;
}
echo "<br/>Schnitt: " . $sum_time / $i;
}
else
{
$int_counter++;
/**
* Um die Maximum execution Time etwas zu umegehen, laden wir die
* Seite einfach neu und übergeben die bisherigen Messwerte
*/
header('Location: ?counter=' . $int_counter . "×=". implode(",", $arr_time));
}
AmicaNoctis 29-01-2010, 15:11 Kleiner Tipp: wenn du ein PHP-Skript auf der Konsole laufen lässt (für sowas wäre das ja ausreichend), gibt es kein Timeout mehr.
Vergiss nicht, dass das reine Dokument noch gar nichts über die "Performance" aussagt. Jedwede eingebundene Ressource (Script, Stylesheets, Grafiken, Flash, Videos, etc) wird in dieser Berechnung nicht berücksichtig, sind aber nicht selten der Flaschenhals, den du ja aufdecken willst.
Lennynero 29-01-2010, 15:25 Kleiner Tipp: wenn du ein PHP-Skript auf der Konsole laufen lässt (für sowas wäre das ja ausreichend), gibt es kein Timeout mehr.
Funktionieren da dann auch die Redirects?
Vergiss nicht, dass das reine Dokument noch gar nichts über die "Performance" aussagt. Jedwede eingebundene Ressource (Script, Stylesheets, Grafiken, Flash, Videos, etc) wird in dieser Berechnung nicht berücksichtig, sind aber nicht selten der Flaschenhals, den du ja aufdecken willst.
Wie schon angesprochen: supergenau ist es nicht, im aktuellen Fall vergleiche ich RewriteRule in der htaccess mit einem header Location in einem PHP Skript, und da beide Aktionen aufgerufen werden bevor irgendetwas anderes passiert, wäre selbst die Apachemeldung das ein Dokument verschoben worden ist mir schon aussagekräftig genug.
Will man detaillierteres Wissen, sind file und fopen sicherlich nicht die geeigneten Mittel.
In einer anderen Variante hatte ich mir die Zeit anzeigen lassen, bis eine einzelne URL aufgerufen wurde, und die Daten die ich dort zurück bekommen hatte, enstprachen den Aufrufzeiten in einem normalen Browser (natürlich nicht 100%, aber es waren halt 0,925 statt 0,823 etc., und wenn man das wiederholte konnte es auch durchaus umgekehrt sein). Erst mit steigender Zahl an Messungen dürfte sich ein richtiger Trend offenbaren.
AmicaNoctis 29-01-2010, 15:28 Funktionieren da dann auch die Redirects?
Nein, aber die brauchst du ja dann nicht mehr, weil das Skript sich nicht mehr selbst aufrufen muss, um "durchzuhalten".
Und was hat dass dann alles damit zu tun, wie schnell eine Seite ausgeliefert ist?
AmicaNoctis 29-01-2010, 15:29 Gar nichts, es ging grad um sein Skript, welches das messen soll.
Lennynero 29-01-2010, 15:34 Nein, aber die brauchst du ja dann nicht mehr, weil das Skript sich nicht mehr selbst aufrufen muss, um "durchzuhalten".
:mir fehlt ein Smiley, der sich gerade mit der flachen Hand auf die Stirn schlägt:
Danke :)
Gar nichts, es ging grad um sein Skript, welches das messen soll.
Ich bezog mich schon auf die mir gegebene Antwort, da kam halt nur was zwischen. Beantwortet ist meine Frage jetzt trotzdem nicht.
AmicaNoctis 29-01-2010, 15:40 Auch immer gern genommen: http://www.tamemymind.com/blog/images2007/smiley-bangheadonwall-yellow.gif
Lennynero 29-01-2010, 15:58 Ich bezog mich schon auf die mir gegebene Antwort, da kam halt nur was zwischen. Beantwortet ist meine Frage jetzt trotzdem nicht.
Und was hat dass dann alles damit zu tun, wie schnell eine Seite ausgeliefert ist?
Kannst du bitte konkreter werden?
Ich habe Eingangs erläutert, das ich zwei Varianten vergleichen möchte und das ich dazu ein geeignetes Tool suche. Aufgrund den Tipps von AmicaNoctis habe ich mir dieses kleine Skript zusammengebastelt, was mir immerhin Zahlen liefert, die mir durchaus Sinnvoll erscheinen (wenn ich, wie auch schon erwähnt, sehe das mir mein Skript meldet eine Seite wurde innerhalb von knappen 0,9 Sekunden geladen und mein Browser mir beim Aufruf der gleichen Seite einen ähnlcihen Wert zurückgibt und zwar in mehreren Fällen, dann kann ich annehmen, dass das Skript entweder das misst was ich denke, dass das Skript Mist misst und es nur absoluter Zufall ist das die Werte ähnlich sind oder dass das Skript vielleicht etwas ganz anderes misst (was wieder zufällig ähnlich der anderen Werte ist)).
Ich habe das Skript einige Male mit meinen "Fällen" getestet und habe in der einen Variante einen Durchschnittswert von 39,4242115 Sekunden gegenüber 39,4295916 in der anderen Variante erhalten. Interessanterweise haben die Werte der ersten Variante weiter gestreut, aber auch nicht so, das ich mir da einen großen Kopf machen sollte.
Getestet habe ich allerdings nicht gleichzeitig, sondern abwechseln, und ja, es ist mir bewusst das auch das eine Fehlerquelle für Unterschiedliche Zeiten sein kann, aber deshalb habe ich das Skript ja auch mehrmals (abwechseln mit den beiden Varianten) laufen lassen. Nur um das auf den Punkt zu bringen: mit den beiden Varianten meinte ich die Skripte, die hinter den Seiten liegen die ich aufgerufen habe und das sind nicht die jetzt im Skript stehenden URLs.
So, und jetzt kommst du.
Woraus liest du, das ich einen Flaschenhals suche? Aus welchem meiner Beiträge ist sowas zu erlesen?
Auch immer gern genommen: http://www.tamemymind.com/blog/images2007/smiley-bangheadonwall-yellow.gif
Ja, der trifft es doch ziemlich gut :)
warum schreibt man für solche simplen Tests ein extra Skript?
Er sprach davon, dass er einen lokalen XAMP hat, also einen Apache
Dieser bringt das Stress-/Testtool doch schon mit "ab" ;)
ab -n [anzahlAnfrage] -c [gleichzeitigeAnfragen] [url]
als einfachste Abfrage. Man kann sogar Postdaten etc schicken
Lennynero 29-01-2010, 16:56 warum schreibt man für solche simplen Tests ein extra Skript?
Er sprach davon, dass er einen lokalen XAMP hat, also einen Apache
Dieser bringt das Stress-/Testtool doch schon mit "ab" ;)
ab -n [anzahlAnfrage] -c [gleichzeitigeAnfragen] [url]
als einfachste Abfrage. Man kann sogar Postdaten etc schicken
Sagt mal, schreibe ich hier Swahili?
Aus dem Eingangsbeitrag:
Ich suche nun ein kleines Tool, das eigentlich nichts anderes macht als mir eine bestimmt URL mehrmals aufzurufen und mir dann mitteilt, wie lange es gedauert hat bis die Seite da war.
Titel, vielleicht etwas unglücklich ausgedrückt:
Windows Tool um Perfomance einer Seite zu messen
Von da aus kann "er" dir die Frage warum er ein Skript schreibt ganz einfach beantworten: "er" kannte ab nicht, weshalb "er" diesen Thread eröffnet hat um genau so eine Anwort zu erhalten.
Ich danke dir.
Gruss,
Lenny
AmicaNoctis 29-01-2010, 17:02 "er" kannte ab nicht, weshalb "er" diesen Thread eröffnet hat um genau so eine Anwort zu erhalten.
Falls es dich tröstet: Ich arbeite seit Jahren mit Apache (ohne XAMPP) und kannte "ab" auch nicht, sonst hätte ich es dir auch gleich empfohlen. :)
Lennynero 29-01-2010, 17:29 Falls es dich tröstet: Ich arbeite seit Jahren mit Apache (ohne XAMPP) und kannte "ab" auch nicht, sonst hätte ich es dir auch gleich empfohlen. :)
Das ist ja eigentlich das Schöne: man lernt immer wieder dazu. Nicht so schön: ich befürchte ich werden die Apache Benchmark wieder vergessen, aber mich dann irgendwann daran erinnnern, das da zumindest mal was war :)
Wo ich vorhin wohl überreagiert habe: ich denke das ich meine Probleme schon passend umschreibe, unset scheint die Einleitung nur überflogen zu haben und sich (nur?) am Titel orientiert zu haben. Bei TBT hat mich die Frage "warum schreibt man für solche simplen Tests ein extra Skript?"... die ich angsichts der eben zitierten Frage meinerseits als... überflüssig betrachte (ähnlich wie der Kreisschluss in einem anderen meiner Threads: "Wie lese ich aus wieviel Speicher eine Zeile benötigt" [...Erklärung wieso ich das Wissen will - viel Diskussion um DB-Design und Normalisierung ...] gefolgt von "Der Speicherbedarf deiner Zeilen ist zu groß".
Auch wenn ich gerne diskutiere und auch wenn ich die Fachkompetenz hier sehr zu schätzen weiss: wenn ich hier eine Frage poste, dann habe ich normalerweise schon vorher nach Lösungen gesucht und bringe mein Problem doch auf den Punkt. Wenn ich mich dann erst durch Grundlegendes diskutieren muss, mich für DB-Design etc. rechtfertigen muss, dann kostet das allen Zeit, die man konstruktiver verbringen könnte.
Egal, ich bin gerne hier, denn auch wenn es manchmal ruckelt... "hier wird ihnen geholfen" :grin:
Tipp:
Im Apache/bin Ordner des XAMPP findet sich ein kleines Progrämmchen, welches extra für solche Zwecke erfunden wurde: ab.exe
Doku:ab - Apache HTTP server benchmarking tool - Apache HTTP Server (http://httpd.apache.org/docs/2.0/programs/ab.html)
onemorenerd 29-01-2010, 18:55 @combie: 2,5h zu spät. :D
@combie: 2,5h zu spät. :D
Oha....
:rocks: naja, doppelt hält besser :rocks:
War mir wohl durch die Lappen gegangen, dass der Thread schon 2 Seiten hat.
|
|