Idle Timout für FastCGI-Childs

Apache, Lighttpd, nginx, Cherokee
theomega
Userprojekt
Userprojekt
Posts: 696
Joined: 2003-01-27 14:36

Idle Timout für FastCGI-Childs

Post by theomega » 2007-01-02 16:03

Hallo Leute,
ich habe einen Apache2 mit mod_fastcgi und php5 ähnlich zu dem debianhowto-howto konfiguriert. Probleme bereitet allerdings folgender Fakt: Wenn zu hochzeiten viele Prozesse gleichzeitig benötigt werden (z.b. wenn der Google Crawler vorbeikommt), dann geht die anzahl der php-cgi-prozesse hoch. Das ist auch ok so. Nur geht die Anzahl der Prozesse nichtmehr runter, ich habe also vergleichsweise viele inaktive php-cgi-prozesse.
Ich habe nun gesehen das ein einen Idle-timout bei fastcgi gibt. Die Frage ist nur: Wie aktiviere ich diesen und wo muss der hin?

Und wo wir gerade dabei sind: Wie findet man heraus was die optimalen parameter für die anzahl der childs vom fastcgi ist?

Gruß
TO

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Idle Timout für FastCGI-Childs

Post by Joe User » 2007-01-02 16:32

Ich kann Dir zu Apache+mod_fastcgi leider nicht direkt helfen, bei Lighttpd lassen sich hier vier Werte festlegen:

Code: Select all

fastcgi.server = (
    ".php" => (
        (
            "bin-path" => "/usr/bin/php-cgi",
            "socket" => "/tmp/fastcgi_php.sock",
            "min-procs" => 1,
            "max-procs" => 2,
            "bin-environment" => (
                "PHP_FCGI_CHILDREN" => "4",
                "PHP_FCGI_MAX_REQUESTS" => "250",
            ),
            "bin-copy-environment" => (
                "PATH",
                "SHELL",
                "USER",
            ),
            "broken-scriptfilename" => "enable",
        ),
    ),
)
min-procs = Minimum Anzahl der FCGI-Prozesse
max-procs = Maximum Anzahl der FCGI-Prozesse
PHP_FCGI_CHILDREN = Anzahl der FCGI-Threads pro FCGI-Prozess
PHP_FCGI_MAX_REQUESTS = Maximum Anzahl der Requests pro FCGI-Thread

Obige Konfiguration bedeutet also:
Minimum 1 FCGI-Prozess und maximum 2 FCGI-Prozesse mit jeweils 4 FCGI-Threads (Childs) mit einer Lifetime von 250 Requests.

Mit anderen Worten: Es wird mindestens ein FCGI-Prozess mit vier FCGI-Threads gestartet und maximal zwei FCGI-Prozesse mit jeweils vier FCGI-Threads, insgesamt also acht FCGI-Threads. Ein FCGI-Thread wird nach spätestens 250 Requests gegen einen neuen eingetauscht, was unter Anderem bei Memleaks im FCGI-Programm (nicht Script) helfen kann und IMHO eleganter als ein FCGI-IDLE-TIMEOUT ist. In top siehst Du auf einem nicht-NPTL-System also fünf beziehungsweise zehn FCGI-Prozesse, auf einem NPTL-System siehst Du die FCGI-Threads erst nach einem <SHIFT><H>.

Hoffe ich habe das richtig erläutert ;)

HTH
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

theomega
Userprojekt
Userprojekt
Posts: 696
Joined: 2003-01-27 14:36

Re: Idle Timout für FastCGI-Childs

Post by theomega » 2007-01-04 14:26

Hy,
ich habe so wie es scheint bei mod_fastcgi im apache keine Kontrolle darüber wieviele Prozesse gespawnt werden, nur darüber wieviele Childs es gibt und nach wieviele Request neugestartet werden soll.

Die Frage ist jetzt: Ist es sinnvoll möglichst wenig Prozesse und dafür jeweils möglichst viele Childs zu haben oder umgekehrt. Welcher "MAX_REQUEST"-Wert empfiehlt sich? Ich habe das Problem das ich immer extrem viele untätige Prozesse (nicht Childs) habe, was ich zumindest im Top beobachten kann.

Wie findet man die richtigen Werte für die Anzahl der Childs?

Danke
TO

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Idle Timout für FastCGI-Childs

Post by Joe User » 2007-01-04 14:51

Man beobachtet den Webserver zur Rush-Hour und setzt die Childs so, dass man notfalls noch mindestens einen Child frei hat. Wenn Dir die Childs ausgehen, werden Requests (nach dem Timeout) zurückgewiesen...
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.