Cronjob und PHP-Speicherlimit
am 16.10.2011 - 23:53 Uhr in
Auf einer Webseite, die relativ viele Module (90 Stk.) integriert hat, wird der Cronjob nicht erfolgreich ausgeführt (automatisch gesteuert). Wenn ich ihn manuell aus dem Backend ("per Hand ausführen") starte, so endet er mit einem Fatal Error.
Erst bei der Erhöhung des PHP-Speicherlimits auf sage und schreibe 1024 MB läuft der Cronjob erfolgreich durch.
max_execution_time = 320
memory_limit = 1024 M
Das ist doch sicher nicht normal, oder? Hat jemand einen Tip, wie ich aufspüren kann, welches Modul solch einen hohen Speicherbedarf hat, um vollständig ausgeführt zu werden? Oder ist die "max_execution_time" eventuell zu kurz? Mit den Cronjobs kenne ich mich nicht sonderlich gut aus, da es irgendwie so ein paar "unsichtbare" Jobs sind ;-).
- Anmelden oder Registrieren um Kommentare zu schreiben
verwendest du apache mit
am 17.10.2011 - 12:33 Uhr
verwendest du apache mit mod_php? Dann gibt es schon 2x das memory_limit, einmal in /etc/php5/apache/php.ini (für die Seiten, die über Apache ausgeliefert werden, wie der Backend) und einmal unter /etc/php5/cli/php.ini, welcher für die Ausführung auf Kommandozeile ausgewertet wird (z.B. für drush).
1GB hab ich jetzt noch nie gesehen, ich komme momentan gut mit 160 MByte aus, habe auch einige Module.
Du wird warscheinlich nicht umhin kommen, die Module mal sukzessive abzuschalten und so den schuldigen ausfindig zu machen.
Hast du Custom Module? Die sind wohl am meisten verdächtig, da bei den contrib Modulen sowas i.d.R. auffallen würde.
Wie viele Nodes / Content hast du denn?
Ja, mod_php5 ist aktiv, was
am 17.10.2011 - 20:09 Uhr
Ja, mod_php5 ist aktiv, was auch immer das ist. Was bedeutet das für die Seite, wenn es zwei verschiedene Speicherlimits gibt?
Es läuft lediglich ein Custom Modul, bzw. ein Modul, welches erweitert wurde. Nodes sind ca. 42650 im Einsatz. Eine Galerie organisiert Untergalerien in denen jedes Bild eine einzelne Node ist. Sind das zu viele? Ich denke nicht...
Das nacheinander Abschalten von Modulen zum Testen ist sehr umständlich. Gibt es kein Script, welches den Cronjob "aufzeichnen" kann?
Hast du Shell Zugriff auf den
am 18.10.2011 - 08:41 Uhr
Hast du Shell Zugriff auf den Server? Dann kannst du mit drush --debug cron genau sehen, was da passiert und vermutlich auch wann es hakt...
Aber sowas lieber in einer lokalen dev umgebung testen und nicht unbedingt auf dem live server.
Wenn sich das Problem in deiner Entwicklungsumgebung reproduzieren lässt, kannst du mit drush und evt. xdebug der Sache auf den Grund gehen.
Mit drush kannst du auch die Module viel schneller ab- und wieder anschalten (drush en/dis module) und dann mit drush cron den cron lauf starten.
Aber Achtung! Hierfür gilt dann das Speicherlimit in /etc/php5/cli/php.ini, also das evt. noch hochsetzen.
Aber wie gesagt, das würde ich nicht auf einem Live-Server machen.
Bei der Anzahl an Nodes könnte evt. das xmlsitemap Modul Probleme machen, wenn du das einsetzt.
Auch das Custom Modul würde ich als eines der ersten mal abschalten
Welche Drupal Version verwendest du?
Leider habe ich keinen
am 18.10.2011 - 21:48 Uhr
Leider habe ich keinen Zugriff auf den Server. Ich könnte den entsprechenden Admin darum bitte. Allerdings wäre das der Live-Server. Einen lokalen Server betreibe ich nicht. Bisher gingen kleine Projekte immer online zu editieren/ testen. Wahrscheinlich sollte ich mir als erstes lokal eine vernünftige Testumgebung einrichten. Vielen Dank für deine Beschreibung an der Stelle.
xmlsitemap benutze ich nicht. Das Custom Modul ist eine Erweiterung des bekannten Moduls "ad". Das Modul baut darauf auf und steuert ein paar Anzeigen über verschiedene Boxen hinweg. Das Modul "supercron" gibt auch ein paar Hinweise über einzelne Cron-Aufgaben und deren Ausführungszeit. Das werde ich erstmal testen, noch bevor ich eine lokale Umgebung einrichte. Leider ist es wohl noch nicht ausgereift.
Drupal läuft in der aktuellen Verison 6.22-DE.
Schau dir mal Quickstart an:
am 18.10.2011 - 22:19 Uhr
Schau dir mal Quickstart an: http://drupal.org/node/1032202
Da bekommst du eine komplett eingerichtete Entwicklungsumgebung und kannst sofort loslegen.
Dann kannst du, wenn der Fehler auf der Test Instanz auch auftritt, mit drush mal genau nachschauen.
Vor allem kannst du nix verbocken, wenn du die Module deaktivierst.
Viel Glück!
Habe dasselbe Problem, der
am 19.10.2011 - 10:13 Uhr
Habe dasselbe Problem, der Cronjob läuft nicht durch, weil max_execution_time mit 30 Sekunden zu kurz ist, soweit ganz klar.
Soooviele Module sinds bei uns auch nicht (aber doch einige), aber das UpdateStatus-Modul checkt für jedes installierte Modul ab, ob ein Update vorhanden ist
(Aktualisierungsbenachrichtigung), und DAS ist es, was bei uns soviel Zeit braucht.
Solange ich nun auf die max_execution_time keinen Einfluss habe (Bürokratie ^^), ist das Update-Status Modul abgeschaltet, der Check wird nun nicht mehr über den
Cron ausgeführt.