Incron stürzt ab öfters ab
Schönen guten Tag auch,
ich habe ein Debian Squeeze System auf einem Hetzner EX4 laufen.
Dazu habe incron installiert, um diverse Verzeichnisse zu überwachen bzw. ein PHP Skript auszuführen.
Soweit funktioniert das Ganze eigentlich auch wunderbar, er erkennt den IN_CLOSE_WRITE und führt das Skript mit dem Dateinamen aus.
Das Skript selbst parsed die Datei und schreibt dann die Daten in eine mySQL Datenbank.
Nun kann es sein, dass im späteren Stadium auf ca. 300 Verzeichnisse (abhängig von der Kundenanzahl) eine Überwachung läuft.
Dies wiederum kann dazu führen, dass eben ca. 300 Kunden bzw. deren Überwachungsgeräte per FTP 2-5 Dateien uploaden.
Worst-Case Szenario wäre also hier, dass 300 gleichzeitige FTP Uploads reinkommen.
Das wollte ich heute mal ausprobieren, indem ich per Skript in mehrere Verzeichnisse Dateien kopiert hatte. Alles in allem, man will ja stressen, 800-2000 Dateien auf 5-10 Verzeichnisse (je nach Test) .
Um nicht bis zu 2000 PHP Calls zu haben, die die Datenbank gleichzeitig attakieren, habe ich einen eher unschönen, aber einigermaßen praktikablen Ansatz gewählt, indem ich zum Start der PHP Datei folgendes einfügte:
Mittendrinnen, jedoch ohne (für mich) erkennbares Muster, stürtzt incrond ab. Laut syslog mit:
Ich hatte noch das ganze /var/log durchwühlt aber keinen weiteren Eintrag gefunden, der mir genauere Infos liefern könnte.
Dies geschieht nicht zwangsläufig nach einem Test oder nach X Tests, auch nicht nach X Dateien, sondern einfach so.
Auch bei einem Test mittels FTP, indem ich ein paar Dateien upgeloaded habe, brachte das Ganze zum Crash (dürften ungefähr 1000 Dateien gewesen sein). Natürlich kamen diese nicht auf einen Rutsch daher, sondern wurden Stück für Stück übertragen (max. Uploadgeschwindigkeit 10KB/s).
Übrigens behandelt jeder Call auch nur 1 Datei. Was mir aber schon aufgefallen ist, ist der Umstand, dass das Signal 2 x kommt und natürlich dementsprechend 2 mal das Skript auf dei Datei ausgeführt werden würde.
Aber dadurch sollte sich ja nicht der Daemon zum Absturz bringen lassen oder?
Gibt es denn eventuell noch Möglichkeiten, wo etwas geloggt sein könnte?
Gibt es unter *nix die Möglichkeit dazu, den Dienst so einzurichten, dass er sich nach einem Absturz automatisch wieder selbst startet?
Danke schon mal für Hilfen und Ratschläge
Gruß
Micha
ich habe ein Debian Squeeze System auf einem Hetzner EX4 laufen.
Dazu habe incron installiert, um diverse Verzeichnisse zu überwachen bzw. ein PHP Skript auszuführen.
Soweit funktioniert das Ganze eigentlich auch wunderbar, er erkennt den IN_CLOSE_WRITE und führt das Skript mit dem Dateinamen aus.
Das Skript selbst parsed die Datei und schreibt dann die Daten in eine mySQL Datenbank.
Nun kann es sein, dass im späteren Stadium auf ca. 300 Verzeichnisse (abhängig von der Kundenanzahl) eine Überwachung läuft.
Dies wiederum kann dazu führen, dass eben ca. 300 Kunden bzw. deren Überwachungsgeräte per FTP 2-5 Dateien uploaden.
Worst-Case Szenario wäre also hier, dass 300 gleichzeitige FTP Uploads reinkommen.
Das wollte ich heute mal ausprobieren, indem ich per Skript in mehrere Verzeichnisse Dateien kopiert hatte. Alles in allem, man will ja stressen, 800-2000 Dateien auf 5-10 Verzeichnisse (je nach Test) .
Um nicht bis zu 2000 PHP Calls zu haben, die die Datenbank gleichzeitig attakieren, habe ich einen eher unschönen, aber einigermaßen praktikablen Ansatz gewählt, indem ich zum Start der PHP Datei folgendes einfügte:
$random = rand(0, 30);
sleep($random);
Mittendrinnen, jedoch ohne (für mich) erkennbares Muster, stürtzt incrond ab. Laut syslog mit:
Dec 23 12:28:46 servermaster incrond[4850]: *** unhandled exception occurred ***
Dec 23 12:28:46 servermaster incrond[4850]: polling failed
Dec 23 12:28:46 servermaster incrond[4850]: error: (11) Resource temporarily unavailable
Dec 23 12:28:46 servermaster incrond[4850]: stopping service
Ich hatte noch das ganze /var/log durchwühlt aber keinen weiteren Eintrag gefunden, der mir genauere Infos liefern könnte.
Dies geschieht nicht zwangsläufig nach einem Test oder nach X Tests, auch nicht nach X Dateien, sondern einfach so.
Auch bei einem Test mittels FTP, indem ich ein paar Dateien upgeloaded habe, brachte das Ganze zum Crash (dürften ungefähr 1000 Dateien gewesen sein). Natürlich kamen diese nicht auf einen Rutsch daher, sondern wurden Stück für Stück übertragen (max. Uploadgeschwindigkeit 10KB/s).
Übrigens behandelt jeder Call auch nur 1 Datei. Was mir aber schon aufgefallen ist, ist der Umstand, dass das Signal 2 x kommt und natürlich dementsprechend 2 mal das Skript auf dei Datei ausgeführt werden würde.
Aber dadurch sollte sich ja nicht der Daemon zum Absturz bringen lassen oder?
Gibt es denn eventuell noch Möglichkeiten, wo etwas geloggt sein könnte?
Gibt es unter *nix die Möglichkeit dazu, den Dienst so einzurichten, dass er sich nach einem Absturz automatisch wieder selbst startet?
Danke schon mal für Hilfen und Ratschläge
Gruß
Micha
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 178067
Url: https://administrator.de/contentid/178067
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
5 Kommentare
Neuester Kommentar
Und was spricht dagegen, einen normalen Cron zu benutzen, der die Ordner einfach regelmäßig durchläuft?
Oder PHP in einer Schleife?
Übrigens hat unter Unix jeder Benutzer Beschränkungen auf die Anzahl der maximalen Prozesse und maximal geöffneten Dateien.
Alle neueren Service-Manager die nicht mehr auf dem reinen init basieren machen das.
Sonst gibt es auch immer noch z.B. supervise: http://cr.yp.to/daemontools/supervise.html
Oder PHP in einer Schleife?
Übrigens hat unter Unix jeder Benutzer Beschränkungen auf die Anzahl der maximalen Prozesse und maximal geöffneten Dateien.
Gibt es unter *nix die Möglichkeit dazu, den Dienst so einzurichten, dass er sich nach einem Absturz automatisch wieder selbst startet?
Alle neueren Service-Manager die nicht mehr auf dem reinen init basieren machen das.
Sonst gibt es auch immer noch z.B. supervise: http://cr.yp.to/daemontools/supervise.html
könnten sich die 2 Aufrufe doch in die Quere kommen oder nicht?
Du kannst ja mit File Locking arbeiten und so prüfen ob eine Datei bearbeitet wird.
Wie bringe ich diese Beschränkung bezüglich max Procs und max Files in Erfahrung bzw. wie/wo kann ich die ändern?
Innerhalb einer Shell kann man die Grenzen mit ulimit steuern und abfragen: ulimit -a
.Oder du nimmst statt FTP-Upload einen HTTP-Upload und kannst PHP direkt einbinden.
Vielleicht ist PHP dafür aber auch einfach das falsche Werkzeug und du solltest eher Java etc. benutzen.