Fórum Root.cz

Hlavní témata => Server => Téma založeno: James_Scott 30. 11. 2011, 12:48:21

Název: Jak automaticky ukončovat PHP procesy?
Přispěvatel: James_Scott 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í..
Název: Re:Jak automaticky ukončovat PHP procesy?
Přispěvatel: Jakub L. 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
Název: Re:Jak automaticky ukončovat PHP procesy?
Přispěvatel: James_Scott 30. 11. 2011, 13:10:16
Ahaa, já tam měl hodnotu 5000, díky ;)

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

Název: Re:Jak automaticky ukončovat PHP procesy?
Přispěvatel: Tom_as 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?
Název: Re:Jak automaticky ukončovat PHP procesy?
Přispěvatel: Nassir 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.