Ankündigung

Einklappen
Keine Ankündigung bisher.

curl in EDOMI

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    curl in EDOMI

    Ich mach zu dem Thema mal einen eigenen Thread auf, da mich eure Erfahrungen interessieren:
    Ich habe jetzt wochenlang die diversen Logikseiten in meinen System deaktiviert, weil ich massiv Schwierigkeiten mit
    - Speicherverbrauch
    - KNX Verbindungsabbrüchen
    hatte.
    Aktuell ist mein System wieder stabil bei ca. 11% Speicherverbrauch und ohne KNX-Abbrüche.
    Nicht verwendet werden aktuell:
    UNIFI-Bausteine
    Alexa-Bausteine
    Abfragen zu LBS updates
    Sobald ich hier was aktiviere geht es wieder los (mehr oder weniger schnell, je nach Aufruffrequenz)

    All diese Bausteine verwenden curl Aufrufe in php. Ich bin der Meinung hier liegt was im Argen.
    Evtl. mag der ein oder andere mal prüfen, ob er meine Vermutungen erhärten kann. Evtl. kennt auch jemand einen Umweg um curl nicht zu benutzen?

    Gruß
    Winni

    #2
    Hi,

    ich hab nur den LBS Abfragebaustein aktiv... da fällt mir aber nichts auf.. Mein RAM ist eigentlich seit Monaten stabil...

    an dem kann's fast nicht liegen.. oder hast du den noch modifiziert ?

    Gruß Martin
    Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

    Kommentar


      #3
      Du hast seit Monaten Edomi nicht neu aktiviert. Kaum zu glauben.

      Und der LBS Abfragebaustein hat wahrscheinlich auch eine sehr niiedrige Frequenz. Hatte ich auch seit Anfang an in Benutzung und war nicht auffällig, erst mit dem Alexa Baustein wurde es richtig heftig.

      Kommentar


        #4
        Es ist aus meiner Sicht ein Memory Leak in curl. Wenn ein hochfrequenter curl daemon LBS läuft, dann wird Memory allokiert und nicht wieder freigegeben.
        Wenn es hingegen kein daemon LBS ist, dann bleibt das Ergebnis der curl-Abfrage lediglich im Linux Filesystem Cache und kann mit

        Code:
        sync && echo 3 > /proc/sys/vm/drop_caches
        wieder freigegeben werden. Wobei die eigentlich nicht notwendig ist, wenn das passiert automatisch wenn ein anderen Prozess Speicher braucht. Wenn man es nicht explizit machen, dann führt das halt auch zu einem roten Memory Balken in EDOMI.

        Ich habe das mal mit einem Skript verifiziert, welches eine curl Anfrage in einer Endlosschleife ausführt. Dabei ist zu sehen, dass auf dem EDOMI Server mit php 5.3.3 immer mehr Speicher allokiert wird und man ihn eben nicht mit dem o.g. Statement zur Löschung des Caches wieder als frei angezeigt bekommt. Die Freigabe erfolgt erst beim Beenden des Skripts.

        Wenn ich gleiches Skript auf meinem Ubuntu 17.10 Desktop laufen lassen, bleibt der Memory-Footprint des Prozesses stabil.

        Interessant ist allerdings, dass ich dasselbe Memory Problem allerdings auch mit php7 auf dem EDOMI Server habe. Ich bin nicht sicher woran das liegt? Ggf. muss man dort für ein per scl installiertes PHP7 noch php-curl nachinstallieren, da vielleicht sonst das curl von php5.3.3 verwendet wird. Würde mich zwar überraschen, wenn das so ablaufen würde, aber vielleicht weiss Michael ( wintermute ) ja mehr dazu.

        Hier mal das Skript:

        PHP-Code:
        <?php

        while (1) {
            
        $randomString generateRandomString();
            
        $url 'https://www.google.de/search?q='.$randomString;
            
        $ch curl_init();
            
        curl_setopt($chCURLOPT_URL$url);
            
        curl_setopt($chCURLOPT_HEADER0);
            
        curl_setopt($chCURLOPT_USERAGENT'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)');
            
        curl_setopt($chCURLOPT_RETURNTRANSFER1);
            
        curl_setopt($chCURLOPT_FOLLOWLOCATION1);
            
        $content curl_exec($ch);
            
        $info curl_getinfo($ch);
            
        curl_close($ch);
            
        $result_info = ($info['http_code'] == 200) ? true false;
            if (
        $result_info) echo "."; else echo 'x';
        }

        function 
        generateRandomString($length 10) {
            
        $characters '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
            
        $charactersLength strlen($characters);
            
        $randomString '';
            for (
        $i 0$i $length$i++) {
                
        $randomString .= $characters[rand(0$charactersLength 1)];
            }
            return 
        $randomString;


        ?>
        Das Monitoring des Speicherverbauchs ist relativ einfach mit 'top' möglich. Hier ist Spalte RES für den entsprechenden php Prozess zu beobachten. Durch drücken von 'c' kann man sich in der top-Ansicht die komplette Kommandozeile einblenden lassen, so dass man den richtigen Prozess identifizieren kann.

        Kommentar


          #5
          Zitat von Winni Beitrag anzeigen
          Du hast seit Monaten Edomi nicht neu aktiviert. Kaum zu glauben.
          .
          Das ist so nicht richtig
          Aber ich hatte das System sicher mal einige Wochen nicht neu aktiviert.. und da ist mir nichts aufgefallen.



          Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

          Kommentar


            #6
            jonofe
            André, probier das ganze mal bitte mit einem
            PHP-Code:
            curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0); 
            dabei...

            EDIT: PHP's curl.so ist gegen die libcurl gelinked, also werden beide PHP-Versionen dieselbe Curl-Library benutzen... (kann man aber mit "ldd /irgendein/php-library/pfad/curl.so" rausfinden)
            Zuletzt geändert von wintermute; 19.01.2018, 16:46.

            Kommentar

            Lädt...
            X