Eine mögliche Erklärung zwicken könnte sein, dass die PHP-Garbage-Collector mit dem Skript stört. Das könnte der Grund sein, warum du zufällige Todesopfer siehst. Wenn der Garbage Collector eingeschaltet ist, wird der Zyklusfindungsalgorithmus immer dann ausgeführt, wenn der Root-Puffer voll ist.
Die PHP manual Staaten:
Die Logik hinter der Fähigkeit, den Mechanismus auf und auszuschalten, und selbst Zyklus Sammlung zu initiieren ist, dass einige Teile der Anwendung sehr zeitempfindlich sein könnten.
Sie könnten versuchen, den PHP-Garbage Collector mit gc_disable
zu deaktivieren. Das Handbuch empfiehlt, dass Sie gc_collect_cycles
aufrufen, bevor Sie den Puffer freigeben.
Eine andere Erklärung könnte der Code selbst sein. Ein 8-Stunden-Skript ist ein langes Skript, und wenn es komplex ist, könnte es leicht einen Haken verursachen, der das Skript zum Beenden veranlasst. Ich denke für Ihre Fehlersuche jetzt, sollten Sie auf jeden Fall Fehlerberichte zu Bericht alles mit error_reporting(-1);
wenden.
Auch, wenn Ihr Skript mit anderen Diensten kommuniziert, sagen Sie eine Datenbank zum Beispiel, ist es durchaus möglich, dass das Problem sein könnte. Wenn der Datenbankserver nicht genügend Arbeitsspeicher oder Zeitüberschreitung aufweist, kann dies dazu führen, dass das Skript hängen bleibt und abstürzt. Wenn dies der Fall ist, können Sie Ihre Verbindungen zu der Datenbank aufteilen und während des Skripts in bestimmten Zeitabständen verbinden/trennen, um diese Verbindung frisch zu halten. Dieselbe Mentalität könnte auch auf andere Dienste angewendet werden, mit denen Sie möglicherweise kommunizieren.
Sie könnten, zu Testzwecken, Ihr Skript absichtlich in eine Protokolldatei schreiben, um eine erfolgreiche Abfrage durchzuführen. Achten Sie darauf, dass der Zeitstempel von der Abfrage und der Abfrage eingefügt wird. Sie erhalten möglicherweise keine Fehler, aber es kann Ihnen helfen, festzustellen, ob eine bestimmte Problemabfrage vorliegt oder ob eine Abfrage länger als gewöhnlich anhält. Sie können auch überprüfen, ob Ihre MySQL-Verbindung noch gültig ist und etwas ausdrucken, um Sie darüber zu informieren.
Ein Beispiel Protokolldatei:
[START 2011/01/21 13:12:23] MySQL Connection: TRUE [END 2011/01/21 13:12:28] Query took 5s
[START 2011/01/21 13:12:28] MySQL Connection: TRUE [END 2011/01/21 13:12:37] Query took 9s
[START 2011/01/21 13:12:39] MySQL Connection: TRUE [END 2011/01/21 13:12:51] Query took 12s
Wenn Sie „keine Fehler“ erwähnt hat, dass die Log-Dateien einschließen? – acm
auf welcher Plattform Sie das Skript ausführen? Gewinnen/Linux? –
@andre: Ja, 'error_log ('test')' wird in diese Log-Dateien ausgegeben, aber ich bekomme keine Fehler, wenn das Skript ausstirbt. – HyderA