Kaimane
28.11.08, 13: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
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