Jak automaticky ukončovat PHP procesy?

Jak automaticky ukončovat PHP procesy?
« kdy: 30. 11. 2011, 12:48:21 »
Ahoj, požívám na Debianu Squeeze Apache2(suexec, mpm_worker) + PHP 5.3 přes mod_fcgid.
Když někdo navštíví web, který jede na PHP - vytvoří se správně počet procesů podle FCGIWrapper /var/www/php-fcgi-scripts/web3/php-fcgi-starter .php ,ale ty procesy se samy nikdy neukončí, dokud nerestartuji Apache.

Existuje nějaká volba, která by zabíjela po určitém čase PHP procesy? Takhle je to poměrně náročné na paměť..

Díky za každé nakopnutí..


Jakub L.

Re:Jak automaticky ukončovat PHP procesy?
« Odpověď #1 kdy: 30. 11. 2011, 13:02:26 »
ve wrapperu nastavte tuhle proměnnou:
PHP_FCGI_MAX_REQUESTS

čím méně, tím dřív se budou ty běžící procesy killovat a spouštět znova

Re:Jak automaticky ukončovat PHP procesy?
« Odpověď #2 kdy: 30. 11. 2011, 13:10:16 »
Ahaa, já tam měl hodnotu 5000, díky ;)

A nějaká proměná,která nastavuje timeout neexistuje?


Tom_as

Re:Jak automaticky ukončovat PHP procesy?
« Odpověď #3 kdy: 30. 11. 2011, 13:24:35 »
Kdyz je tam nastavene 5000 a ten proces je v pameti, k cemu je to dobre? Funguje to jako docasne cache?

Nassir

Re:Jak automaticky ukončovat PHP procesy?
« Odpověď #4 kdy: 30. 11. 2011, 17:22:42 »
Ak by sa v okamihu poziadavky musel nastartovat novy proces, tak by sa jednalo vlastne o staru implementaciu cgi. Ta je pomala prave koli celej rezii pri vyrabani procesu. V pripade fcgi uz mate vsetko nastartovane, zostava len spracovat data. Inteligentnejsi spravca procesov fcgi dokonca nastartuje niekolko procesov napred a ak su nepouzivane tak ich znova zatvori, ale stale je tam rezerva na nove spojenia.
Netusim ako v php, ale pre mnohe jazyky je moznost vyuzit to, ze proces sa nevypne a ukladat si napriklad premenne medzi jednotlivymi poziadavkami. Zdrojak potom vyzera ako jedna velka slucka "dokial mam nove poziadavky ...". V okamihu ukoncenia procesu sa proste v kode vyhodnoti, ze uz dalsia poziadavka nie je na rade a vy si mozete este nieco rychlo poznacit...
Casto som videl informaciu, ze maximalny pocet poziadaviek je vhodne nastavit nizko aj koli pripadnym memory leakom - napr kazdych 500 poziadaviek sa restartne proces a zasa mate cistu pamet (ale kto by bol ochotny tolerovat memory leak, vsakze?).
No a na zaver doporucujem si pozriet fpm, co je FastCGI Process Manager pre php. Ten sa startuje ako samostatny daemon, ma vynikajuce nastavenia, moze pocuvat na porte, alebo cez socket na disku, moze bezat php v chroote, pod inym uzivatelom pre kazdy virtualhost... Prave ho skusam, takze este neviem ci je rychlejsi, ale urcite je viac nastavitelny.
Pre mod_fcgid je premennych vela, daju sa najst v dokumentacii na stranke apache.org. Mozete si pozriet napr tieto, ktore nastavujem ja priamo v httpd.conf pre jednotlive virtualhosty: ProcessLifeTime, IPCCommTimeout, IPCConnectTimeout, MaxRequestLen. A vo wraperi este PHP_FCGI_CHILDREN=2 (alebo aj 1 napr pre nejaku administracnu stranku, kam chodi malo ludi) pre malo navstevovane virtualhosty.