unregelm. Probleme mit Mod_fastcgi + php5

Apache, Lighttpd, nginx, Cherokee
rouven
Posts: 58
Joined: 2002-10-10 15:27

unregelm. Probleme mit Mod_fastcgi + php5

Post by rouven » 2007-01-30 14:38

Hallo hab ein Problem mit mod_fastcgi + php5.2 (

das ganze läuft zwar aber es kommt in unregelmäßigen Abständen zu folgendem Problem (apache2 error log)
[error] [client XX] FastCGI: comm with server "/var/www/php-fcgi-scripts/party9/php-fcgi-starter" aborted: idle timeout (30 sec)
[error] [client 89.48.XX.x] FastCGI: incomplete headers (0 bytes) received from server "/var/www/php-fcgi-scripts/vhost1/php-fcgi-starter"
nach einem apache restart läuft das ganze wieder ne zeitlang

in der suexec log steht nur
uid: (uvhost/uvhost) gid: (gvhost/gvhost) cmd: php-fcgi-starter
uid: (uvhost/uvhost) gid: (gvhost/vhost) cmd: php-fcgi-starter
uid: (uvhost2/uvhost2) gid: (103/103) cmd: php-fcgi-starter
das php-fcgi-startet script sie wie folgt aus
#!/bin/sh
PHPRC="/var/www/vhost1.de/conf"
export PHPRC
PHP_FCGI_CHILDREN=20
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=100
export PHP_FCGI_MAX_REQUESTS
wobei ich schon mit PHP_FCGI_CHILDREN ganz raus genommen hab oder auf 4 gesetzt hab, brauchte keine Änderung. ebenso hab ich mit und ohne PHP_FGI_MAX_REQUEST probiert

php5.2 wurde wie folgt konfiguriert
Command './configure' '--enable-memory-limit' '--enable-force-cgi-redirect' '--enable-track-vars' '--with-pcre-regex' '--with-mysql' '--without-sqlite' '--without-mm' '--enable-fastcgi' '--prefix=/home/php5-user/' '--disable-debug' '--enable-bcmath' '--enable-calendar' '--enable-ctype' '--enable-gd-imgstrttf' '--enable-gd-native-ttf' '--enable-magic-quotes' '--enable-mbstring' '--with-bz2' '--with-gd' '--without-pgsql' '--with-zlib' '--with-xml=shared' '--with-curl' '--with-mcrypt' '--with-mhash'
Der Server liefert im Fehlerfall die Seiten immer langsamer aus, teilweise kommt dann ein 500er Error irgendwann ist komplett tuck.

jemand ne Idee? hab im Forum schon gesucht aber nicht wirklich was brauchbares gefunden

kase
Posts: 1031
Joined: 2002-10-14 22:56

Re: unregelm. Probleme mit Mod_fastcgi + php5

Post by kase » 2007-01-30 17:22

Am besten mod_fastcgi durch mod_fcgid ersetzen, vermutlich sind dann die Fehler behoben.

Welches OS verwendest du denn? (Falls Debian, welche Version, Sarge, Etch)

Wenn du auf mod_fcgid umsteigst, unbedingt beachten, dass du PHP_FCGI_CHILDREN=0 in deinem php-fcgi-starter setzt.

Welcher Apache wäre auch noch ganz interessant, Apache 2 oder 2.2?

Edit: PHP_FCGI_MAX_REQUESTS=100 ist auch ein extrem kleiner Wert, verwende hier am besten (egal ob mod_fastcgi oder mod_fcgid) irgendwas größer als 1000,

rouven
Posts: 58
Joined: 2002-10-10 15:27

Re: unregelm. Probleme mit Mod_fastcgi + php5

Post by rouven » 2007-01-31 01:42

danke für die antwort,

verwende apache2 mit debian sarge.

gibts irgendwie ein howto oder näherer infos für fcgid?

EDIT hab mir eben mal fcgid drauf gemacht, bekomme aber dann segmentation fault. muss ich da php anderst compilieren wie mit fast_cgi?

kase
Posts: 1031
Joined: 2002-10-14 22:56

Re: unregelm. Probleme mit Mod_fastcgi + php5

Post by kase » 2007-01-31 17:21

rouven wrote:EDIT hab mir eben mal fcgid drauf gemacht, bekomme aber dann segmentation fault. muss ich da php anderst compilieren wie mit fast_cgi?
Nein, musst du nicht.

Poste mal bitte die Ausgabe von

Code: Select all

# `which php5-cgi` -v || `which php-cgi` -v
PHP 5.2.0-8 (cgi-fcgi) (built: Dec 17 2006 19:57:41)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies

Code: Select all

# cat /etc/apache2/mods-available/fcgid.conf
<IfModule mod_fcgid.c>
  AddHandler fcgid-script .fcgi
  SocketPath /var/lib/apache2/fcgid/sock
  # Lange IPCC Timeouts, damit es unter Last keine 500er gibt.
  IPCConnectTimeout 60
  IPCCommTimeout 120
  # Maximal X Score-Punkte, Score um 1 erhoehen bei
  # Prozess-Spawn/Termination.
  SpawnScoreUpLimit 30
  SpawnScore 1
  TerminationScore 1
  # Maximal X PHP Prozesse pro vHost,
  # 40 reicht selbst fuer sehr stark frequentierte Seiten.
  # Eventuell niedriger setzen, falls Ram/Cpu begrenzt (zB vServer).
  DefaultMaxClassProcessCount 40
  # Mindestens X PHP Prozesse pro vHost bereit halten fuer Anfragen.
  # Eventuell hoeher setzen (5+), falls sehr hohe Lastspitzen zu erwarten sind.
  DefaultMinClassProcessCount 2
  # Security
  PHP_Fix_Pathinfo_Enable 1
  # PHP Prozesse nach spaetestens 10 Stunden neu starten
  ProcessLifeTime 36000
  # PHP Prozesse nach X Requests neu starten
  # Wird in php-fcgi-starter gesetzt, immer -1 (unendlich)
  MaxRequestsPerProcess -1
</IfModule>

Code: Select all

debian:~# cat /var/www/php-fcgi-starter/timo/php-fcgi-starter
#!/bin/sh
# Alle alten PHP Prozesse, die dem Init gehoeren, killen.
# Nur auskommentieren, falls man Probleme mit schlafenden php Prozessen im INIT hat.
# Unbedingt User (timo) und php-Binary (/usr/bin/php5-cgi) anpassen.
# ps ax -F | awk '{ if ( $3 == "1" && $1 == "timo" && $12 == "/usr/bin/php5-cgi" ) { print "kill " $2 } }' | sh
# Pfad zur php.ini, ohne / am Ende.
PHPRC="/var/www/fastcgi/timo"
export PHPRC
# Maximale Requests pro php-Prozess, verhindert immer
# groesser werdende php-binarys zB durch memory leaks.
# Nicht zu niedrig waehlen, da sonst bei hoher Load
# die Binarys zu oft neu gestartet werden muessen. (>=5000)
# Wert IMMER setzen, 0 fuer unendlich (ab PHP 5.2)
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
# Anzahl an php-fcgi-children (Prozesse), mindestens 2, maximal 100.
# Ein guter Wert (gemessen mit AB (Apache Benchmarking Tool) ist
# "Anzahl gleichzeitiger PHP Zugriffe (concurrency) geteilt durch 4"
# Wert IMMER setzen, 0 fuer keine Children (ab PHP 5.2), saemtliche Anfragen uebernimmt dann der Parent.
# --------------------
# ACHTUNG mod_fcgid:
# Bei mod_fcgid und DefaultMaxClassProcessCount > (groesser als) 1
# Wert immer 0 setzen, ansonsten spawnt mod_fcgid
# PHP_FCGI_CHILDREN * (mal) DefaultMaxClassProcessCount Prozesse
# PHP_FCGI_CHILDREN=0 benoetigt mindestens PHP 5.2,
# falls PHP < 5.2 sehr kleinen Wert benutzen.
PHP_FCGI_CHILDREN=0
export PHP_FCGI_CHILDREN
# IP Adresse, von der connections akzeptiert werden, normalerweise nur localhost
FCGI_WEB_SERVER_ADDRS="127.0.0.1"
export FCGI_WEB_SERVER_ADDRS
exec /usr/bin/php5-cgi
Außerdem in den vHost, in dem php benötigt wird:

Code: Select all

AddHandler fcgid-script .php
FCGIWrapper /var/www/php-fcgi-starter/timo/php-fcgi-starter .php

rouven
Posts: 58
Joined: 2002-10-10 15:27

Re: unregelm. Probleme mit Mod_fastcgi + php5

Post by rouven » 2007-02-01 07:59

ich habe jetzt das problem das ich ein
You don't have permission to access /index.php on this server.
bekomme, rechte stimmen, mit fastcgi läufts.

vhost ist wie folgt konifuriert
NameVirtualHost *
<VirtualHost *>
ServerAdmin ask@me.com
ServerName vhost.de
ServerAlias *.vhost.de

DocumentRoot /var/www/vhost.de/public
DirectoryIndex index.php

SuexecUserGroup uvhost gvhost


<Directory />
Options FollowSymLinks
AllowOverride NONE
</Directory>
<Directory /var/www/vhost>
Options FollowSymLinks
AllowOverride NONE
Order allow,deny
allow from all
</Directory>


<Directory "/var/www/php-fcgi-scripts/vhost">
AllowOverride None
Options +ExecCGI -MultiViews -Indexes
Order allow,deny
Allow from all
</Directory>



ErrorLog /var/log/apache2/error.log


<Directory "/var/www/vhost/public">

Options -All +FollowSymlinks +ExecCGI

AddHandler fcgid-script .php
FCGIWrapper /var/www/php-fcgi-scripts/vhost/php-fcgi-starter .php



RewriteEngine on
...


</directory>


CustomLog /var/log/apache2/access_p9.log combined
ServerSignature On

</VirtualHost>
ansonsten
php5-user/bin]$ ./php-fcgi -v
PHP 5.2.0 (cgi-fcgi) (built: Nov 13 2006 17:54:18)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies

kase
Posts: 1031
Joined: 2002-10-14 22:56

Re: unregelm. Probleme mit Mod_fastcgi + php5

Post by kase » 2007-02-01 13:07

rouven wrote:ich habe jetzt das problem das ich ein
You don't have permission to access /index.php on this server.
bekomme, rechte stimmen, mit fastcgi läufts.

Code: Select all

chown uvhost:www-data /pfad/in/der/die/index/liegt
chmod 750 /pfad/in/der/die/index/liegt
PHP Dateien sollten dann uvhost:gvhost (750) sein, alle anderen Dateien uvhost:www-data (750). (Für maximale Sicherheit).

Ansonsten sollte es auch kein soo großes Problem sein, wenn auch die PHP Dateien uvhost:www-data (750) sind, dann muss nur sichergestellt werden, dass defintiv keinerlei Scripte als www-data ausgeführt werden können.

Edit: Und bei so Rechte-Sachen immer /var/log/apache2/error.log bzw /var/log/apache2/suexec.log mitposten, denn da steht meistens schon drin, was zu tun ist.

cirox
Posts: 212
Joined: 2006-05-08 23:20
Location: Berlin

Re: unregelm. Probleme mit Mod_fastcgi + php5

Post by cirox » 2007-03-11 18:04

kase wrote:

Code: Select all

# Alle alten PHP Prozesse, die dem Init gehoeren, killen.
# Nur auskommentieren, falls man Probleme mit schlafenden php Prozessen im INIT hat.
# Unbedingt User (timo) und php-Binary (/usr/bin/php5-cgi) anpassen.
# ps ax -F | awk '{ if ( $3 == "1" && $1 == "timo" && $12 == "/usr/bin/php5-cgi" ) { print "kill " $2 } }' | sh
Ich habe mal ein bisschen mit dem Befehl rumgespielt, allerdings erkenn ich nich nicht ganz die Logik, da ich die Shellbefehle nicht verstehe.

Wann werden denn die genau gekillt? Wenn keine Requests mehr stattfinden? Wenn kein Parent da ist? Also kann man ja die Zeile reinnehmen, weil laufende Requests werden nach meinen Tests auf keinen Fall gekillt .....

Allerdings schon alte Prozesse. Ich habe bloss immer das Gefühl, wenn bei jedem Starter Aufruf die Befehlszeile durchlaufen wird, dass dann wohlmöglich doch laufende aktuelle fcgid Prozesse gekillt werden. Aber dem wird wohl nicht so sein. Deswegen frag ich.

Gibt es dafür nicht auch die Direktive?:

IdleTimeout

Na jedenfalls zieht die bei mir nicht fcgid. Ich hab schon alte Prozesse, die auch noch ins SWAP ausgelagert werden. Das stört natürlich.

Des Weiteren ist wohl:

ProcessLifeTime

nur für aktive Prozesse?

kase
Posts: 1031
Joined: 2002-10-14 22:56

Re: unregelm. Probleme mit Mod_fastcgi + php5

Post by kase » 2007-03-11 18:40

Es gab (bzw besser gibt, er ist bisher NUR in php-head, also dem CVS behoben) einen Bug, bei dem fcgid den Parent gekillt hat, dieser aber nicht alle seine Childs "mitgenommen" hat. Du hattest dann elternlose Childs, die nicht mehr dem Apache, sondern dem Init gehört haben, aber gar kein Socket zum Zugreifen mehr hatten (der Parent war ja killed).

Und genau dafür sorgt diese Zeile. Auf alle "normalen" php-fcgi Prozesse hat dies keine Auswirkung.

Hier der Bug:
http://bugs.php.net/bug.php?id=40286
Last edited by kase on 2007-03-11 18:44, edited 2 times in total.

cirox
Posts: 212
Joined: 2006-05-08 23:20
Location: Berlin

Re: unregelm. Probleme mit Mod_fastcgi + php5

Post by cirox » 2007-03-11 18:40

alles klar :)