konto usunięte

Temat: Nginx + FastCGI

Witam,

niedawno postanowiłem przejść z Apache2'a na nginx'a + fastcgi. Początkowe wrażenia są bardzo pozytywne - śmiga to lepiej i jest w stanie pociągnąć więcej requestów. Dzisiaj w nocy zauważyłem jednak, że procesy php-cgi (odpalane przez spawn-fcgi) umarły. Po ponownym uruchomieniu wszystko działało ok. Trochę mnie to zmartwiło, bo nic nie znalazłem w logach w /var/log. I tutaj mam pytanie do was - czy mieliście podobne problemy w kombinacji nginx+FastCGI? Ewentualnie, jak mogę weryfikować, co wywala mi procesy php-cgi?
Na chwilę obecną odpaliłem php-cgi przez start-stop-daemon, z argumentami:


PHP_FCGI_CHILDREN=20
PHP_FCGI_MAX_REQUESTS=1000


Nginx ma 16 procesów i maksymalnie idzie do niego 300 zapytań na sekundę - ale w nocy, kiedy się to stało szacuję, że było około 90-130.
Sporo na sieci wyczytałem o ustawieniu zmiennej PHP_FCGI_MAX_REQUESTS, że zmiana jej wartości może być rozwiązaniem tego problemu.
Ja jednakże i tak chciałbym jakoś weryfikować każde pady FastCGI i byłbym wdzięczny za wskazówkę, jak mogę to robić.

PozdrawiamTomasz Jurczyk edytował(a) ten post dnia 10.09.10 o godzinie 10:09
Paweł B.

Paweł B. System
Administrator,
eCircle Poland

Temat: Nginx + FastCGI

Tak, procesy php odpalane w ten sposob cyklicznie sie zakanczaja. O ile dobrze pamietam to wyglada to jakby konczyly sie ladnie po osiagnieciu wartosci okreslonej przez max req. a nie wywalaly sie z powodu jakiegos bledu. Wiecej powiedza ci src. lub strace.

Temat: Nginx + FastCGI

Zależy ;]. Jeżeli spawnujesz jeden proces PHPa (MAX_CHILDREN nie ustawione) to rzeczywiście tak działa.

Jeżeli natomiast każesz PHPowi spawnować "dzieci" to MAX_REQUESTS będzie się odnosiło tylko do potomków, czyli jak child proces obsłuży 1000 requestów to wyjdzie, ale proces "matka" będzie działać i spawnie na to miejsce nowego childa. Ja używam to tak:

spawn-fcgi -a 127.0.0.1 -p 9000 -C 4 -n -u www-data -g www-data /usr/bin/php5-cgi

( -C 4 - spawnuj 4 childy)

Możesz spróbować odpalić go na screenie i zobaczyć co się dzieje (ja swojego uruchamiam z daemontools)
Paweł B.

Paweł B. System
Administrator,
eCircle Poland

Temat: Nginx + FastCGI

Yeap, problem w tym, ze dzieciaki cyklicznie sie zakanczaja w malym odstepie czasu co przy duzym ruchu bywa zauwazalne. Mozna to wyciagnac z logow nginx szukajac 502 - bad gateway.
Zjawisko widac dobrze w 'ps aux' po czasie zycia dzieciakow (czas ich zycia od najstarszego do najmlodszego jest niewielki co znaczy, ze respawnowaly sie w podobnym czasie). Aby zlagodzic efekt mozna zwiekszyc max req. przez co cala sytuacja bedzie sie przytrafiac zadziej.

BTW: http://demotywatory.pl/777794/Very-Bad-Gateway :)Paweł Biel edytował(a) ten post dnia 10.09.10 o godzinie 13:28
Radosław Bułat

Radosław Bułat Ruby on Rails
developer,
Adtaily.com

Temat: Nginx + FastCGI

Miałem dokładnie ten sam problem. Początkowo korzystałem ze skryptu spawn-fcgi z paczek ubuntu. Teraz korzystam z następującego skryptu, który działał na innej maszynce (podejrzewam iż "znalezione w necie") i działa wyśmienicie:


#!/bin/bash
BIND=127.0.0.1:9000
USER=www-data
PHP_FCGI_CHILDREN=15
PHP_FCGI_MAX_REQUESTS=1000

PHP_CGI=/usr/bin/php-cgi
PHP_CGI_NAME=`basename $PHP_CGI`
PHP_CGI_ARGS="- USER=$USER PATH=/usr/bin PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS $PHP_CGI -b $BIND"
RETVAL=0

start() {
echo -n "Starting PHP FastCGI: "
start-stop-daemon --quiet --start --background --chuid "$USER" --exec /usr/bin/env -- $PHP_CGI_ARGS
RETVAL=$?
echo "$PHP_CGI_NAME."
}
stop() {
echo -n "Stopping PHP FastCGI: "
killall -q -w -u $USER $PHP_CGI
RETVAL=$?
echo "$PHP_CGI_NAME."
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: php-fastcgi {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL

konto usunięte

Temat: Nginx + FastCGI

Cześć,

na chwilę obecną chyba rozwiązałem problem - znalazłem wcześniej skrypt który podał Radosław i FastCGI odpaliłem korzystając z niego. Wynikiem tego jest jak na razie brak killowania się procesów FastCGI.
Dzięki za zainteresowanie tematem,

Pozdrawiam!
Tomasz
Tomasz Zadora

Tomasz Zadora programuję

Temat: Nginx + FastCGI

Polecam korzystanie z php-fpm - zostało uznane przez sam zespół developerski php i domyślnie włączone do dystrybucji php od wersji 5.3.

Działam na tym (nginx + php-fpm) i nie mam żadnych problemów, same pozytywne wrażenia - potrafi dynamicznie dostosowywać ilość procesów dzieci do aktualnego obciążenia i wiele innych zalet.

Przy okazji zapraszam na grupę poświęconą nginx-owi: http://www.goldenline.pl/grupa/nginx

Następna dyskusja:

Autostart fastcgi




Wyślij zaproszenie do