Viele XML Datein durchsuchen

  • Moin zusammen,


    ich bin vor kurzem zu Netcup ( Webhosting 4000 ) gewechselt und habe jetzt eher eine Performance Frage.


    Ich möchte, durch einen Cronjob, alle 5 Minuten von einem FTP Server eine zip Datei Downloaden diese entpacken. Darin befinden, je nach Status, viele XML Datein.

    Diese möchte ich öffnen (SimpleXMLElement) und einen bestimmten Knoten mit einer foreach durchsuchen.

    Wenn das gesuchte gefunden wurde wird die XML Datei in eine Datenbank geschrieben sonst die Datei gelöscht.


    Da ich nicht möchte das andere Kunden , durch mein Script, beeinträchtigt werden, wollte ich nachfragen ob das ein Problem mit der Performance werden könnte?


    Vielen Dank für eure Einschätzung.


    Viele Grüße


    Dominik

  • Du hast ja nicht wirklich Zahlen genannt.


    Wie lange läuft das Script? Hast Du mal gemessen wie viel CPU und RAM das Script frisst?



    Die Zip Datei ist aktuell ca 500 kb groß und es befinden sich 196 XML Datein dort drin.


    Memory Start: 413832 Bytes

    Memory End: 449432 Bytes


    Kann man über PHP CPU Auslastung messen?


    Scriptlaufzeit: 328.4 Millisekunden


    Die zip Datei kann sich jede Minuten ändern. Es können mal mehr mal weniger XML Datei drin sein.

  • Scriptlaufzeit: 328.4 Millisekunden

    Klingt so, als würde das Hostsystem das überhaupt nicht spüren.


    Ich glaube, du musst dir da keine Sorgen machen.

    Gerade da du das ja als Cronjob einrichtest, hast du ja nur einen "Thread".

    Solange sich die Crons nicht überschneiden (und mit der Ausführungszeit bist du wohl weit davon weg), brauchst du nicht mehr als einen Core des Hostsystems.

    Dein RAM ist ja eh begrenzt, den kannst du dem Hostsystem nicht "wegnehmen"

    Meine (Netcup) Produkte: S 1000 G7, VPS 200 G8 Ostern 2019, IPs, Failover..

  • Ja, schließe mich da auch der Meinung von Lukay an.


    Da wird sich das System drüber kaputt lachen. Dachte da jetzt eher an 3 Minuten Laufzeit und 200MB RAM oder so. Du musst nur sicher stellen, dass der Task nicht fest sitzt und somit im Minutentakt immer wieder neue Crons gestartet werden obwohl der alte noch nicht fertig ist.

  • Vielen Dank für eure Einschätzungen.



    Ja, schließe mich da auch der Meinung von Lukay an.


    Da wird sich das System drüber kaputt lachen. Dachte da jetzt eher an 3 Minuten Laufzeit und 200MB RAM oder so. Du musst nur sicher stellen, dass der Task nicht fest sitzt und somit im Minutentakt immer wieder neue Crons gestartet werden obwohl der alte noch nicht fertig ist.


    Meinst du damit das Script dann nach x Minuten Laufzeit abbrechen wenn er es nicht durchzieht?

  • Meinst du damit das Script dann nach x Minuten Laufzeit abbrechen wenn er es nicht durchzieht?

    Du musst halt entweder verhindern dass das Script länger läuft als der Intervall in dem es gestartet wird oder Du musst verhindern dass ein neuer Prozess gestartet werden kann, wenn ein vorhandener noch nicht beendet wurde.


    Ansonsten hast Du am Ende mehrere Instanzen Deines Scripts gleichzeitig laufen.


    Sich darauf zu verlassen "dass das ja eh nicht passieren wird", wäre unklug.

  • Da ich das Webhosting 4000 Paket habe, kann ich wenn ich nichts übersehen habe nicht überprüfen ob das Script noch läuft oder?


    Also würde ich in der foreach schleife regelmäßig die Zeit messen und bei bedarf das Script abbrechen?

    Macht das Sinn?

  • Folgender Workflow ist eigentlich Standard bei sowas:


    • Cron startet Script
    • Script schaut ob lock-Datei auf dem Dateisystem existiert
    • Wenn ja, Script abbrechen
    • Wenn nein, Script legt lock-Datei auf Dateisystem ab
    • Script tut Dinge die es so tun soll
    • Script löscht lock-Datei
    • Script beendet sich

    Eine lock-Datei ist dabei einfach ne leere Datei die an einer festen Stelle liegt. Existiert die Datei, läuft der Cron gerade, existiert die nicht, läuft auch der Cron nicht.


    Sollte sich das Script mal mit einem Fehler vorzeitig verabschieden, muss dies natürlich abgefangen werden. Ansonsten wird die lock-Datei nicht gelöscht und das Script läuft "nie wieder".

  • Moin Hacke,


    die max_execution_time ist bei mir auf 180 Sekunden eingestellt.


    Wenn ich also die auf 60 Sekunden einstelle dann sollte das Script wenn es in einen Fehler läuft nach 60 Sekunden automatisch abgebrochen werden oder?


    Was natürlich eine anständige Fehleranalyse nicht ausschließt.

  • PHP über CLI ist bei den Webhosting-Tarifen nicht verfügbar.

    Meine Minecraft-Plugins auf SpigotMC (Open Source): www.spigotmc.org/members/mfnalex.175238/#resources

    Discord: discord.jeff-media.com

  • Blödsinn.


    Webhosting 4000 de a1:

    Code
    bash-4.3$ find / -type f -executable -name php
    /usr/local/php71/bin/php
    /usr/local/php72/bin/php
    /usr/local/php70/bin/php
    /bin/php
    bash-4.3$ /usr/local/php72/bin/php -v
    PHP 7.2.7 (cli) (built: Jul 10 2018 16:34:55) ( NTS )
    Copyright (c) 1997-2018 The PHP Group
    Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
        with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v10.1.0, Copyright (c) 2002-2017, by ionCube Ltd
  • Die maximale Ausführungszeit wird aber durch diverse Faktoren beeinflusst. Gerade externe Abfragen (DB, …) können die Zeit deutlich mehr ausnützen, als erlaubt!

    Die set_time_limit()-Funktion und die max_execution_time Konfigurationsdirektive beschränken nur die Ausführungszeit des Skripts selbst. Zeit die für Aktivitäten außerhalb des Skripts aufgebracht wird wie z.B. die Ausführung von Systemaufrufen mit system(), Streamoperationen, Datenbankabfragen usw. werden nicht in die Berechnung der Ausführungszeit mit einbezogen.

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • perryflynn sorry, du hast recht! hatte das verwechselt mit Python und Perl :) (da gab es letztens ein paar Themen drüber)

    Meine Minecraft-Plugins auf SpigotMC (Open Source): www.spigotmc.org/members/mfnalex.175238/#resources

    Discord: discord.jeff-media.com

  • Moin zusammen,


    ich habe heute mal das Script fertig gemacht und wollte mich kurz nochmal melden.


    Aktuell wird Cronjob alle 5 Minuten ausgeführt.

    Die besagte ZIP Datei ist aktuell 800kb groß und es befinden sich knapp 350 Datein dort drin.


    Das Script läuft 455.0 Millisekunden und verbraucht 100000 Bytes Arbeitsspeicher.


    Vielen Dank nochmal für eure Hilfe.


    Viele Grüße


    Dominik