Skocz do zawartości
gwn

Wiszące procesy apacha

Polecane posty

Witam

 

Mam problem z wiszącymi procesami na serwerze.

Serwer www to apache + fcgi

 

w konf. fcgi jest:

<IfModule mod_fcgid.c>
 AddHandler    fcgid-script .fcgi
FcgidIdleTimeout   10
FcgidProcessLifeTime  600
FcgidMaxProcesses   400
FcgidMaxProcessesPerClass 3
FcgidMinProcessesPerClass 0
FcgidConnectTimeout 20
FcgidIOTimeout 250
FcgidErrorScanInterval 1
FcgidFixPathinfo 0
FcgidIdleScanInterval 5
FcgidBusyTimeout 100
FcgidMaxRequestsPerProcess  5000
FcgidMaxRequestInMem 67108864
FcgidMaxRequestLen  134217728
 PHP_Fix_Pathinfo_Enable 1
 OutputBufferSize 0
</IfModule>

 

 

max_execution_time w php tez na 600

 

a procesy wisza i wiszą. Co możę być przyczyną problemu i jak to rozwiązać ?

 

strace procesu pokazuje tylko:

strace -p 20351
Process 20351 attached - interrupt to quit
restart_syscall(<... resuming interrupted call ...>) = 0
poll([{fd=8, events=POLLOUT}], 1, 1000) = 0 (Timeout)
poll([{fd=8, events=POLLOUT}], 1, 1000) = 0 (Timeout)
poll([{fd=8, events=POLLOUT}], 1, 1000) = 0 (Timeout)
poll([{fd=8, events=POLLOUT}], 1, 1000) = 0 (Timeout)
poll([{fd=8, events=POLLOUT}], 1, 1000) = 0 (Timeout)
poll([{fd=8, events=POLLOUT}], 1, 1000) = 0 (Timeout)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

To nie jest problem, chyba że wyżerają ci dużo pamięci.

Procesy oczekują na połączenia, wg konfiguracji.

Zmniejsz:

 

FcgidMaxProcesses do 50

FcgidProcessLifeTime do 100

 

dodaj

 

DefaultMaxClassProcessCount 10

DefaultMinClassProcessCount 1

MaxProcessCount 30

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

To nie jest problem, chyba że wyżerają ci dużo pamięci.

Procesy oczekują na połączenia, wg konfiguracji.

Zmniejsz:

 

 

 

dodaj

 

Dzięki za odpowiedź.

 

Nazwy parametrów, które podałeś są zastąpione nowszymi:

http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#page-header

 

Mam je dodane i zmieniłem wg Twojej rady na:

FcgidMaxProcesses   50
FcgidMaxProcessesPerClass 10
FcgidMinProcessesPerClass 1

 

Dziwił mnie tylko fakt, że :

FcgidProcessLifeTime 600 ( czyli ustawione na 10 min, wartość wybrana przez programiste ustawiłem tak samo jak max_execution_time w php.ini na 600 )

 

Nie zabija procesów po minięciu czasu. Czy on zacznie zabijać w momencie gdy przekroczona zostanie maksymalna liczba procesów ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

tak sie nie sprawdza czy proces "wisi" tylko po tym czy jest zombie, a jak juz wyzej zostalo wspomniane to normalne ze apach (i nie tylko) uruchamia tyle instancji zeby obslugiwac wielowatkowo ruch

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dziwił mnie tylko fakt, że :

FcgidProcessLifeTime 600 ( czyli ustawione na 10 min, wartość wybrana przez programiste ustawiłem tak samo jak max_execution_time w php.ini na 600 )

 

Nie zabija procesów po minięciu czasu. Czy on zacznie zabijać w momencie gdy przekroczona zostanie maksymalna liczba procesów ?

 

W tym przypadku rzeczywiście zostaw 600.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

gwn, możesz dodać do konfiguracji jeszcze np:

 

FcgidZombieScanInterval 30
FcgidIdleScanInterval 90
FcgidBusyScanInterval 90

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
a procesy wisza i wiszą. Co możę być przyczyną problemu i jak to rozwiązać ?

Ale to jest właśnie istota FastCGI, że procesy wiszą sobie w tle i po zakończeniu zadania nie są zakańczane.

Dzięki temu system przy każdym przychodzącym żądaniu nie musi poświęcać cennego czasu na jego tworzenie, ładowanie bibliotek, no i końcowe sprzątanie. Jeśli chcesz, żeby się zakańczały, to zostań przy zwykłym CGI. Z tym, że to może być w momentach peaku dosyć bolesne.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dzięki za odpowiedzi.

 

PHP_FCGI_CHILDREN we wraperze .sh php masz na ile ustawione?

 

 

export PHP_FCGI_MAX_REQUESTS=500

export PHP_FCGI_CHILDREN=3

 

Ok, czyli wisieć ich w sumie będzie tyle co ustawiłem sobie w FcgiMaxProcess. A czy da się ograniczyć jedną domenę do określonej liczby procesów ? Np dodając we wraperze z którego korzysta ta domena odpowiednią zmienną ? Sytuacja teraz u mnie wyglada tak że domena jednego z userów korzysta aż z połowy procesów określonej w FcgiMaxProcess.

 

Nie chce ograniczać ogólnej liczby procesów usera w /etc/security/limits.conf tylko przyciąć na apachu żeby nie uruchamiało się ich tak dużo z jednej domeny.

 

EDIT:

Wg. rady Miłosza dodałem również:

FcgidIdleTimeout   100
FcgidBusyTimeout 600
FcgidIdleScanInterval 60
FcgidBusyScanInterval 60
FcgidZombiScanInterval 30

Edytowano przez gwn (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość tom3kk

>>export PHP_FCGI_CHILDREN=3

 

I widzisz tu masz blad. Jesli decydujesz sie sie na to aby modul fcgid zarzadzal procesami PHP to powinienes tego globala ustawic na zero, gdyz jak PHP sobie wypusci swojego child'a to modulek nie ma nad nim w ogole kontroli, malo tego - proces moze zawisnac i bedzie tak sobie wisiec do calkowitego restartu apache (i tak faktycznie jest)

 

Masz nawet zmianke w dokumentacji, do ktorej link sam podales:

PHP child process management (PHP_FCGI_CHILDREN) should always be disabled with mod_fcgid, which will only route one request at a time to application processes it has spawned; thus, any child processes created by PHP will not be used effectively. (Additionally, the PHP child processes may not be terminated properly.) By default, and with the environment variable setting PHP_FCGI_CHILDREN=0, PHP child process management is disabled.

 

Podobny haczyk jest z PHP_FCGI_MAX_REQUESTS, otoz jesli planujesz przyciac max req per process to powinienes to robic w module fcgid, tego globala ustaw na jakiegos wielkiego np. 10000 - chodzi o to aby ten global nie byl mniejszy niz max w fcgid.

Edytowano przez tom3kk (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

No i to jest to. Teraz procesy wiszą ale przez taką liczbę czasu jak ustawiłem w konfiguracji i nie jest ich tak dużo. Dzięki bardzo :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×