gwn 0 Zgłoś post Napisano Listopad 26, 2011 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
tym 205 Zgłoś post Napisano Listopad 26, 2011 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
gwn 0 Zgłoś post Napisano Listopad 26, 2011 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
B0FH 3 Zgłoś post Napisano Listopad 26, 2011 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
tym 205 Zgłoś post Napisano Listopad 26, 2011 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
Gość tom3kk Zgłoś post Napisano Listopad 26, 2011 PHP_FCGI_CHILDREN we wraperze .sh php masz na ile ustawione? Udostępnij ten post Link to postu Udostępnij na innych stronach
Miłosz 2311 Zgłoś post Napisano Listopad 26, 2011 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
kafi 2425 Zgłoś post Napisano Listopad 26, 2011 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
gwn 0 Zgłoś post Napisano Listopad 27, 2011 (edytowany) 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 Listopad 27, 2011 przez gwn (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
Gość tom3kk Zgłoś post Napisano Listopad 27, 2011 (edytowany) >>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 Listopad 27, 2011 przez tom3kk (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
gwn 0 Zgłoś post Napisano Listopad 27, 2011 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