(Link nur für registrierte Nutzer sichtbar.) Ist Aber möglicherweise nicht so aussagekräftig wenn du deinen eigenen Server von deinem Server aus pingst. Also wenn der Server offline ist, bekommst du das über das Tool nicht mit...
Setz mal nen minütlichen cronjob auf servermon.php dann hast du in der Ladezeit.txt nach 2 Tagen einen guten Überblick über Lastenspitzen.
Bei Windows: 1. Kommandozeile aufmachen: Windows Taste > "cmd" eingeben > ENTER 2. Hier eingeben: tracert marmorkamin-shop.de > ENTER 3. Ergebnis anschauen
Hi Du, ich hab's mir eben mal angeschaut. Nein, nicht wirklich. Es gibt die Zeit an, die es dauert, eine Verbindung zum Hostnamen auf Port 80 herzustellen. Dabei ist noch gar kein Request abgeschickt, den der Server beantworten müsste. Also es überwacht die prinzipielle Erreichbarkeit des Servers. Hat aber mit dem Shop nicht die Welt zu tun. Mein Ansatz wäre ein HTTP-Request via cURL. Also, wenn das hier Dein Ansatz ist: https://stackoverflow.com/a/34059783 Der drüber ist m.E. geeigneter: https://stackoverflow.com/a/34060286 Nur halt statt $_GET['url'] die tatsächliche Shop-URL mit https.
Schaue ich mal an. Prinzipiell ist beides interessant, finde ich. Also wenn das bisherige Ding schon bockt, dann ist demnach was am Server schon nicht optimal, egal wie gut/schlecht der Shop läuft, oder?
In Netzwerke war ich leider immer Kreide holen. Mir fällt wenig ein, was eine solche Verzögerung sonst noch verursachen könnte als "was am Server schon nicht optimal". Andererseits kann ich mir nicht vorstellen, dass allzu häufig ein all-inkl-Server über eine Minute braucht, nur um eine Verbindung zuzulassen. https://stackoverflow.com/a/12061717 wäre noch ein Ansatz von wegen fsockopen($hostname) sei langsamer als fsockopen(gethostbyname($hostname)); Und dabei ist gethostbyname schon ewig langsam. Also auf deutsch: An der ungewöhnlich langen Zeit kann auch der ausgehende Server Schuld sein. Achja: Du verwendest ein Timeout von 10 Sekunden (müsste eigentlich 10.0 sein als float, aber wird kaum das Problem sein). Wie kann die Ausführung der Codezeile dann deutlich länger als 10 Sekunden dauern? Mir fallen gerade nur die beiden möglichen Gründe ein: Entweder gilt der Hinweis, dass das Timeout bei Dir nicht greift oder es liegt nicht an dem Teil der Ausführung, auf den das Limit angewandt wird.
Aber dann muss man beides zusammenzählen, oder? Oder wie ist dann sowas zu deuten: Server-Status: Erreichbar in 0.673055648804 Sekunden Server-Status: Antwort nach 0.165025 Sekunden Kann ja nicht schneller antworten als er erreichbar ist? Code: <?php ######## Konfiguration Anfang ################################################### $domain = 'https://www.meinshop.de'; // Shop root mit http(s) $benachrichtigungsemail = 'meine@email.de'; // Benachrichtigungsemailadresse $response_threshold = 5; // Response Time in Sekunden, bei deren Überschreitung eine Warnemail geschickt werden soll $log = 1; // Logging deaktivieren (0) oder aktiveren (1) $logfile = 'ladezeit.txt'; // Log-Dateiname (falls Logging aktiviert ist) $modus = 3; // Modus 1: Nur Server-Erreichbarkeit messen | Modus 2: Nur Server-Antwortzeiten messen | Modus 3: Erreichbarkeit und Antortzeiten messen ######## Konfiguration Ende ################################################### // Erreichbarkeit prüfen if ($modus != 2) { $starttime = microtime(true); $file = fsockopen (str_replace('https://', '',str_replace('www.','',$domain)), 80, $errno, $errstr, 15.0); $stoptime = microtime(true); $status = 0; if (!$file) { $status = -1; } // Site is down else { fclose($file); $status = ($stoptime - $starttime) * 1000; // $status = floor($status); } $empfaenger = $benachrichtigungsemail; $betreff = "Server-Status:"; $from = "From: Admin <".$benachrichtigungsemail.">"; // Wenn Server offline => Email if ($status == -1) { $text = "Server-Status: " . $domain . " Offline!"; $betreff .= ' Offline'; mail($empfaenger, $betreff, $text, $from); } // Wenn Response-Zeit > Toleranzschwelle if ($status > $response_threshold) { $text = "Server-Status: " . $domain . " Langsam! " . $status . " Sekunden"; $betreff .= ' Langsam'; mail($empfaenger, $betreff, $text, $from); } echo $text = "Server-Status: Erreichbar in ". $status . " Sekunden</br>"; // Erreichbarkeits-Log schreiben if ($log == 1) { $timestamp = time(); $datum = date("d.m.Y - H:i:s", $timestamp); // Öffnet die Datei, um den vorhandenen Inhalt zu laden $current = file_get_contents($logfile); // Fügt die aktuelle Messung mit Datum und Zeit hinzu $current .= $datum . " - ". $status . "\n"; // Schreibt den Inhalt in die Datei zurück file_put_contents($logfile, $current); } } // Response-Zeit messen if ($modus != 1) { $ch = curl_init($domain); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); if(curl_exec($ch)) { $info = curl_getinfo($ch); echo $text = "Server-Status: Antwort nach ". $info['total_time'] . " Sekunden</br>"; } curl_close($ch); } ?>
Wieso nicht? Du rufst bei mir an und es dauert 1min, bis ich rangehe - gerade in dem Moment, als Du es aufgeben wolltest und auflegst. Du merkst, dass doch noch eine Verbindung zustande kam, rufst gleich nochmal an. Diesmal dauert es nur ein paar Sekunden, bis wir "hallo" ausgetauscht haben. Rein spekulativ: Ggf. kannst Du sogar die Wahlwiederholung verwenden, also kann cURL irgendwelche von fsockopen in Erfahrung gebrachten Infos wiederverwenden. Was Du auf jeden Fall mal probieren könntest: fsockopen 2mal im selben Skript ausführen und Dir die Zeit von beiden Ausführungen ausgeben lassen.
Da hast du mich jetzt abgehängt. Ist es nicht so, dass erst eine Verbindung aufgebaut wird, dann ein Request geschickt wird und dann die Antwort kommt?
Und dabei war ich so stolz auf meine Analogie Ja. Aber deshalb kann doch trotzdem bei einem Mal der Verbindungsaufbau allein schon länger dauern als beim anderen Mal das ganze Prozedere In Summe dauert. Und bzgl. 2x fsockopen probiere ich es jetzt doch noch mal: Es wird die Zeit mitgemessen, die Du brauchst, um meine Nummer rauszusuchen. Der zweite Anruf wird vermutlich mehr über meine Reaktionszeit aussagen, weil Du die Nummer schon parat hast.
Ok... Also muss man Verbindungsaufbau und Request zusammenzählen, richtig? Zum 2x fsockopen: Ok, und wer ist in der Analogie derjenige der die Nummer raussucht, und wie oft wird sie neu rausgesucht? Ist das irgendein Server der den Datenverkehr regelt und der z.B. die "Nummer" ein paar Tage oder Wochen bereithält, oder ist das eher der Server am Internet-Einwahlknoten des Seitenbesuchers, der dann erst profitiert, wenn er kurz nacheinander die selbe Adresse persönlich nochmal besucht? Wenn letzteres, dann interessiert MICH nur der erste Zugriff. Ich mag es kaum laut sagen, aber diese ganze Speed-Optimierung ist für mich primär ein SEO-Anliegen und erst sekundär ein Usability-Anliegen. Also wenn der Google Bot schnell seine Seiten bekommt, bin ich auch glücklich. Kann man natürlich durchaus kritisch sehen und hinterfragen.
Irgendwie verstehe ich die Frage nicht. fsockopen stellt nur die Verbindung her. Der cURL-Aufruf kümmert sich um alles - Verbindungsaufbau, Anfrage an den Server, Antwort vom Server. Kurzum: Ich weiß es nicht. Dabei hätte heute so ein schöner Tag werden können Usability-Anliegen sind SEO-Anliegen.
Ach... so langsam komme ich vielleicht dahinter was du meinst mit 2x cURL - dass man dann auf fsockopen ganz verzichtet. Kurz- und mittelfristig muss man ja erstmal gefunden werden, und dann sollte noch die Usability gut sein. Henne und Ei - lassen wir den Tag so schön wie er ist :-D
2x fsockopen meinte ich In meiner Serverumgebung kann ich aber eh nicht erkennen, dass der 1. Aufruf langsamer wäre als folgende Aufrufe: Code: $domain = 'deinedomain.de'; for ($i = 0;$i < 5;$i++) { $starttime = microtime(true); $file = fsockopen($domain, 80, $errno, $errstr, 10); echo (microtime(true) - $starttime). ' Sekunden<br>'; fclose($file); } 0.022469997406006 Sekunden 0.022286176681519 Sekunden 0.021849870681763 Sekunden 0.021929979324341 Sekunden 0.022125005722046 Sekunden Was mir aber bei der Gelegenheit auffällt: Du multiplizierst die Differenz mit 1000. Damit sind's keine Sekunden mehr, sondern Millisekunden. Das erklärt so manches
Ich hab dann nochmal was Neues hochgeladen, das erst die allgemeine Erreichbarkeit prüft und ggf. eine Warn-Email schickt. Dann Ladezeit-Messung - mit Benachrichtigungsemail und optionalem Logging. Und ohne Rechenfehler Endlich hat Mathematik mal einen Nutzen - um Shops zu beschleunigen