Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Windows Tool um Perfomance einer Seite zu messen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-consult PHP Entwicklung
- Ad -
php-resource




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 . "&times=". 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.

 
unset
29-01-2010, 15:12 
 
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".

 
unset
29-01-2010, 15:28 
 
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 :)

 
unset
29-01-2010, 15:39 
 
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 :)

 
TBT
29-01-2010, 16:22 
 
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:

 
combie
29-01-2010, 18:30 
 
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
29-01-2010, 19:04 
 
@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.


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:46 Uhr.