Modul Server Uptime und Ladezeit Monitor Tool

Thema wurde von Anonymous, 10. April 2021 erstellt.

  1. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.547
    Danke erhalten:
    1.000
    Danke vergeben:
    866
    (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...
     
  2. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.547
    Danke erhalten:
    1.000
    Danke vergeben:
    866
    Setz mal nen minütlichen cronjob auf servermon.php dann hast du in der Ladezeit.txt nach 2 Tagen einen guten Überblick über Lastenspitzen.
     
  3. FlorianR

    FlorianR Erfahrener Benutzer

    Registriert seit:
    20. November 2015
    Beiträge:
    1.181
    Danke erhalten:
    196
    Danke vergeben:
    758
    Bei Windows:
    1. Kommandozeile aufmachen: Windows Taste > "cmd" eingeben > ENTER
    2. Hier eingeben: tracert marmorkamin-shop.de > ENTER
    3. Ergebnis anschauen
     
  4. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    308
    Danke erhalten:
    222
    Danke vergeben:
    80
    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.
     
  5. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.547
    Danke erhalten:
    1.000
    Danke vergeben:
    866
    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?
     
  6. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    308
    Danke erhalten:
    222
    Danke vergeben:
    80
    #26 Dominik Späte, 22. Mai 2021
    Zuletzt bearbeitet: 23. Mai 2021
    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.
     
  7. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.547
    Danke erhalten:
    1.000
    Danke vergeben:
    866
    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? o_O

    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);
        }
    ?>
     
  8. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    308
    Danke erhalten:
    222
    Danke vergeben:
    80
    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.
     
  9. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.547
    Danke erhalten:
    1.000
    Danke vergeben:
    866
    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?
     
  10. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    308
    Danke erhalten:
    222
    Danke vergeben:
    80
    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.
     
  11. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.547
    Danke erhalten:
    1.000
    Danke vergeben:
    866
    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.
     
  12. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    308
    Danke erhalten:
    222
    Danke vergeben:
    80
    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 :confused: Usability-Anliegen sind SEO-Anliegen.
     
  13. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.547
    Danke erhalten:
    1.000
    Danke vergeben:
    866
    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
     
  14. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    308
    Danke erhalten:
    222
    Danke vergeben:
    80
    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 :)
     
  15. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.547
    Danke erhalten:
    1.000
    Danke vergeben:
    866
    Danke dass du den Shop 1000x schneller gemacht hast!
     
  16. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.547
    Danke erhalten:
    1.000
    Danke vergeben:
    866
    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