PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Apache / FCGI] Error 500 - Zu viele Connections nach Ausserhalb



Kaimane
28.11.08, 14:28
Hallo zusammen ...

hab ein kleines Script (php) vom alten auf meinen neuen Server portiert. Beim Ausführen des Scripts bekomme ich nach ca. 20 Sek. Wartezeit einen Fehler 500 (auf dem alten Server funzte das Script einwandfrei; zwar auch Wartezeit (bis zu einer Minute) aber lief bis zum Ende druch).

Nach einiger Zeit Recherche hab ich den Fehler dann gefunden, jedoch konnte ich ihn leider nicht beheben.
Folgendes passiert im Script: Zuerst werden aus der DB einige Datensätze eingeladen (~ 500, kann aber auch mal mehr oder weniger sein). Aufgrund dieser Datensätze stellt das Script per HTTP-Request Verbindungen zu einem externen Server her (Anzahl der Verbindungen = Anzahl der eingelesenen Datensätze).
Diese 500 Verbindungen zum externen Server (in Form von http://domain.tld/1.txt, http://domain.tld/2.txt, ...) scheint meinem Neuen zu viel zu sein und gibt einen Fehler 500 aus. Begrenze ich jedoch die Anzahl der einzulesenden Datensätze auf zB. 50 gibt es keine Probleme und er führt das Script bis zum Ende aus.

Schätze somit, dass in irgendeiner Config die Anzahl der Verbindungen nach Aussen begrenzt werden. Nur leider weiß ich nicht, welche Einstellung ich dafür abändern muss, damit die Verbindungen wieder zugelassen werden.

Würde gerne von euch wissen, an welcher Stelle ich "schrauben" muss, damit die (durchaus 500 Verbindungen) zum Externen durchgelassen werden.

Folgende Umgebung: Debian Etch, Apache 2, PHP5, FastCGI
php5-fcgi-starter


PHP_FCGI_CHILDREN=2
PHP_FCGI_MAX_REQUESTS=500


apache2.conf


<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>


php.ini


max_execution_time = 30
max_input_time = 60
memory_limit = 128M


Zusätzlich fand ich in den Logs lediglich diese Zeilen:


[Fri Nov 28 00:44:10 2008] [warn] FastCGI: (dynamic) server "/var/www/fcgi/domain.tld/php5-fcgi-starter" (uid 2005, gid 2005) started (pid 17232)
[Fri Nov 28 00:44:15 2008] [warn] FastCGI: (dynamic) server "/var/www/fcgi/domain.tld/php5-fcgi-starter" (uid 2005, gid 2005) started (pid 17236)
[Fri Nov 28 00:44:20 2008] [warn] FastCGI: (dynamic) server "/var/www/fcgi/domain.tld/php5-fcgi-starter" (uid 2005, gid 2005) started (pid 17239)
[Fri Nov 28 00:44:25 2008] [warn] FastCGI: (dynamic) server "/var/www/fcgi/domain.tld/php5-fcgi-starter" (uid 2005, gid 2005) started (pid 17242)
[Fri Nov 28 00:44:30 2008] [warn] FastCGI: scheduled the start of the last (dynamic) server "/var/www/fcgi/domain.tld/php5-fcgi-starter" process: reached dynamicMaxClassProcs (5)


Könnt ihr daraus den Fehler schon ableiten?
Würde mich über positive Antwort freuen ...
Vielen Dank im Voraus!

---------------------- EDIT ----------------------

Habe den Fehler nach langem Ausprobieren nun gefunden.
Der Fehler lag in der Datei /etc/apache2/mods-available/fastcgi_ispcp.conf

Vorher


FastCgiConfig -minProcesses 1 \
-maxProcesses 400 \
-maxClassProcesses 5 \
-multiThreshold 80 \
-killInterval 60 \
-startDelay 5
# -singleThreshold 100 \
# -autoUpdate \
# -pass-header HTTP_AUTHORIZATION


Nachher


FastCgiConfig -idle-timeout 300 \
-minProcesses 0 \
-maxProcesses 400 \
-maxClassProcesses 5 \
-multiThreshold 80 \
-killInterval 60 \
-startDelay 5
# -singleThreshold 100 \
# -autoUpdate \
# -pass-header HTTP_AUTHORIZATION


Es haben also lediglich zwei Werte dazu beigetragen, dass der Fehler 500 nicht mehr auftaucht: 'idle-timeout 300' sowie 'minProcesses 0'.

Zudem habe ich die /var/www/fcgi/domain.tld/php5-fcgi-starter wie folgt abgeändert (siehe Post (http://www.isp-control.net/forum/showthread.php?tid=681&pid=19598#pid19598))


#!/bin/sh

umask 022

# Alle alten PHP Prozesse, die dem Init gehoeren, killen
ps ax -F | awk '{ if ( $3 == "1" && $1 == "vu2005" && $12 == "/usr/bin/php5-cgi" ) { print "kill " $2 } }' | sh

PHPRC="/var/www/fcgi/domain.tld/php5/"

export PHPRC
#PHP_FCGI_CHILDREN=2
#export PHP_FCGI_CHILDREN
#PHP_FCGI_MAX_REQUESTS=500
#export PHP_FCGI_MAX_REQUESTS

exec /usr/bin/php5-cgi


Hoffe das ich mit dieser Lösung auch anderen Usern helfen konnte.
Viele Grüße

marce
28.11.08, 14:40
php.ini


max_execution_time = 30
max_input_time = 60
memory_limit = 128M

Ich wette 5€...

Kaimane
28.11.08, 14:46
Ich wette 5€...

Hallo Marce,
den Wert max_execution_time habe ich schon auf 300 hochgesetzt, bringt genau so wenig, leider. Viel mehr liegt meine Vermutung bei den vielen Anfragen nach Außen.
Auf dem alten Server lag die execution_time ebenfalls bei 30 und alles klappte super.

Nun jedoch nicht mehr.
Also Marce, ich schick dir meine PayPal-Verbindung, die 5€ gehören mir :D