Error 500!

schweich1

New Member
Hallo,

beim Aufrufen einer Datei über den Browser, bei der News über ICQ verschickt werden, lädt die Seite erstmal einige Sekunden, bis schließlich die Error 500 Meldung erscheint.


Hier der dazugehörigen Log:


[Sun Feb 06 22:19:58 2011] [notice] mod_fcgid: call /var/www/virtual/Domain/Unterdomain/htdocs/newsflash/index.php with wrapper /var/www/fcgi/Domain/php5-fcgi-starter


Weiß vielleicht jemand, woran das liegen kann?


Auf dem Server läuft ISPCP 1.0.7 omega



Gruß

schweich1
 
Error 500 ist der PHP-Prozess unerwartet gestorben.
Das passiert entweder bei enem E_ERROR Fehler oder wenn schlichtwegs die Zeit- oder RAM-Limit erreicht wurde.

Schau am besten in den entsprechenden PHP-Logs nach (respektiv lass dir eine Logfile ueber entsprechende Konfig der php.ini generieren) um zu ueberpruefen was schlussendlich den Fehler produziert.
 
Hallo,

vielen Dank für den Tip.

Ich hab nun leider nichts brauchbares gefunden, wie ich das richtig in der php.ini einstellen kann.

Kannst du mir vielleicht sagen, was alles ein- bzw. umgestellt werden muss, damit der PHP-Log auch produziert wird?


Gruß

schweich1
 
Muss ich das in der Haupt php.ini abändern oder kann ich das auch in eine php.ini eines bestimmten Users eintragen?

Bei den einzelnen Usern habe ich jedoch immer drei Unterpunkte

z.B.

; display_errors
; Default Value: On
; Development Value: On
; Production Value: Off



Und in welche Datei werden die logs dann gespeichert?
 
Du solltest das in der php.ini eintragen, die laut einer PHP-Datei mit dem Inhalt
PHP:
<?php phpinfo(); ?>
verwendet wird.
 
Du solltest das in der php.ini eintragen, die laut einer PHP-Datei mit dem Inhalt
PHP:
<?php phpinfo(); ?>
verwendet wird.

Okay, die Datei hab ich nun auch rausbekommen, aber das ist genau die, wo bei jedem Punkt 3 Unterpunkte sind.

Beispiel:

; display_errors
; Default Value: On
; Development Value: On
; Production Value: Off


Welches davon muss ich denn anpassen?

Ich möchte ja nicht zu viel ändern :)
 
Eine ohne Semikolon davor, denn das sind nur Kommentare. Sollte die Zeile nicht existieren, füge diese ein.
 
Apache reload nicht vergessen, sonst hängen die fcgid-Prozesse noch eine Weile rum.

Was ist das für ein OS? Wie viele Sekunden dauert es genau, bis der 500er geschmissen wird?
 
Teert und federt mich, aber funktioniert bei Apache nicht auch php5-fpm?

Also bei mir war es unter Nginx noch einige male so, dass mir der fcgi-prozess gestorben ist, letztendlich hat dann php5-fpm Abhilfe geschaffen. Seit der Installation von php5-fpm läuft mein Nginx problemlos, der Apache müsste doch auch etwas mit php5-fpm anfangen können, oder?

500 ist auf jeden Fall wie schon gesagt ein gestorbener Prozess.

Am besten guckst du nach (sofern die Möglichkeit des neustarts besteht), ob die Sache auch wirklich so läuft wie sie soll, oder ob es bei dir genauso ist wie es bei mir war, dass nach einem Neustart von fcgi dann auf einmal (abgezählt!) 33 php-cgi Prozesse laufen, die aber allesamt nichts bewirken.
Code:
ps -e | grep php
 
So, ich habe nun die Punkte ohne Semikolon gefunden und entsprechend angepasst.

Aber wo werden die error-logs denn nun gespeichert bzw. kann ich irgendwo festlegen, wohin dies gespeichert wird.

Der Abbruch erfolgt nach fast genau 40 Sekunden.
 
Bist Du sicher, dass ein Server das richtige für Dich ist? :rolleyes:

display_errors on schreibt die Errors direkt an die Standardausgabe, das ist für ein Produktivsystem generell nicht zu empfehlen.

Es gibt eine PHP-Direktive namens error_log=/pfad/zur/php.log, die in Verbindung mit log_errors = On alles dorthin loggt. Ist aber im Moment egal, da Deine Errors ja auf STDOUT gehen, also im Browser angezeigt werden.

Ich vermute dass es Debian Lenny mit mod_fcgid in Version 2.2 ist? Hier werden durch einen Bug evtl. gesetzte Einstellungen für IPCCommTimeout in den vHosts zurückgesetzt und der Standardwert von 40 Sekunden benutzt.

Läuft ein Skript länger, bricht mod_fcgid das Warten nach 40 Sekunden ab.

Es wäre also zu klären, warum das Skript 40 Sekunden braucht: Wenn es ein Feature ist, dann muss IPCCommTimeout hochgestellt* werden (in Verbindung mit max_execution_time), wenn es nicht solange laufen soll, muss es gebugfixt werden.

* Den IPCCommTimeout kannst Du

a) durch Inkludieren der mod_fcgid.conf in alle vHosts hochsetzen
b) durch eine neuere Version des Moduls mod_fcgid
 
Vielen Dank für den super Hinweis.

Und ja, ich komme super mit dem Server zurecht, habe mich bisher nur noch nicht mit Skript-Abbrüchen beschäftigt, da dies außer nun noch nicht vorkam.

Ich finde es super, wie sehr man hier geholfen bekommt.

Auf die Idee mit den 40 Sekunden war ich gar nicht gekommen :)


Dann werde ich die mod_fcgid.conf in alle vHosts inkludieren.


Nochmals vielen Dank


Edit: Zu den Errors: Die werden mir auch nicht im Browser angezeigt. Habe es nun mit der Datei probiert, funktioniert aber auch nicht. Oder liegt es vielleicht daran, dass diese Abbrüche aufgrund IPCCommTimeout gar nicht darin geloggt werden?
 
Last edited by a moderator:
Darauf kommt man auch nicht, das ist verbuggter Linux/UNIX/OS Frickelkram. Das Modul wird seit einiger Zeit von der Apache Foundation weitergepflegt, seitdem gibt es den Bug mit dem Zurücksetzen auf die Defaults nicht mehr.

Du musst natürlich die IPCCommTimeout auch hochsetzen. Und wenn das Skript fehlerhaft ist, bringt das nichts. Ein Skript, was 40 Sekunden läuft und noch nicht fertig ist, braucht schon gute Gründe dafür...
 
Geändert von schweich1 (Heute um 17:50 Uhr) said:
Edit: Zu den Errors: Die werden mir auch nicht im Browser angezeigt. Habe es nun mit der Datei probiert, funktioniert aber auch nicht. Oder liegt es vielleicht daran, dass diese Abbrüche aufgrund IPCCommTimeout gar nicht darin geloggt werden?

Die Timouts werden nur mit einem communication error vom Apachen für das Modul geloggt. Wenn das Skript in einem infinite loop dreht, gibt es natürlich keine Errors von PHP, sondern nur den Abbruch vom anfordernden Prozess (hier der Apache).

Warum ein Skript hängt, kann viel Gründe haben, die u. U. in fehlerhafter Programmierung zu suchen sind. Wenn sonst andere Skripte problemlos laufen, kann man davon ausgehen.

Gibt es das zum Downloaden?
 
Nein, das Skript wurde nach meinen Informationen selbst geschrieben.

Es verteilt, wenn ich das richtig verstanden habe, News über ICQ, und in der Datenbank sind rund 600 Kontakte eingetragen :)
 
Dann muss man es so bauen, dass es die Nachrichten in einer Queue abarbeitet und sich dann halt 20 x 30 Mal selbst aufruft bis alle weg sind.
 
So, habe nun in allen vhosts die Änderung eingetragen, apache neugestartet, jedoch ist keine Veränderung zu erkennen.

Kann es vielleicht daran liegen, dass ich ISPCP installiert habe und das Skript eigene Konifurationsdateien mitbringt?
Bei mir gibt es die Datei fcgid_ispcp.conf, in der auch die Zeitangaben drin sind, die ich aber schon früher mal hochgesetzt hatte, wodurch diese eventuell auch nicht richtig beachtet wurde.
Muss ich die Datei dann in die vhosts inkludieren?


Die Hinweise zur Programmierung habe ich mal an den Inhaber des Skriptes weitergeleitet.


Vielen Dank für die Antworten :)
 
Back
Top