Skocz do zawartości
Zaloguj się, aby obserwować  
elroy

nginx z php5cgi i fastcgi - bardzo wolno pracuje

Polecane posty

Witajcie

Staram się od dwóch dni zmienić apache i wybór padł na nginx+php5-cgi+spawncgi

Pierwsza próba niestety dowiodła, że coś skopałem. Strony strasznie wolno się otwierają a w logach sypie błędami

 

 

Spawncgi odpalam tak:

 

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 6 -u www-data -g www-data -f "/usr/bin/php5-cgi -c /etc/php5/cgi/php.ini"

 

 

config nginxa

 

user www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid    	/var/run/nginx.pid;

events {
worker_connections  1024;
# multi_accept on;
}

http {
include   	/etc/nginx/mime.types;
  server_tokens off;
access_log<>/var/log/nginx/access.log;

sendfile    	on;
#tcp_nopush 	on;

#keepalive_timeout  0;
keepalive_timeout  65;
tcp_nodelay    	on;

gzip  on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

 

config vhosta

server {

listen   80; ## listen for ipv4
server_name site.pl www.site.pl;
access_log  	/var/log/nginx/site.pl.access.log;
error_log   	/var/log/nginx/site.pl.error.log;
root   /home/www/site.pl;
index  index.html index.php;

location / {
if (!-e $request_filename) {
rewrite ^/([^?]*)(?:\?(.*))? /index.php?title=$1&$2 last;}
}


#location ~ /\.  { access_log off; log_not_found off; deny all; }


location = /robots.txt  { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }

 location ~ \.php$ {
 include /etc/nginx/fastcgi_params;
 fastcgi_pass  127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param  SCRIPT_FILENAME  /home/tomek/www/wiki_piwo_org$fastcgi_script_name;

 }
}

 

fastcgi_params

fastcgi_param  QUERY_STRING   	$query_string;
fastcgi_param  REQUEST_METHOD 	$request_method;
fastcgi_param  CONTENT_TYPE   	$content_type;
fastcgi_param  CONTENT_LENGTH 	$content_length;

fastcgi_param  SCRIPT_NAME    	$fastcgi_script_name;
fastcgi_param  REQUEST_URI    	$request_uri;
fastcgi_param  DOCUMENT_URI   	$document_uri;
fastcgi_param  DOCUMENT_ROOT  	$document_root;
fastcgi_param  SERVER_PROTOCOL	$server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE	nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR    	$remote_addr;
fastcgi_param  REMOTE_PORT    	$remote_port;
fastcgi_param  SERVER_ADDR    	$server_addr;
fastcgi_param  SERVER_PORT    	$server_port;
fastcgi_param  SERVER_NAME    	$server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS	200;
fastcgi_param  REDIRECT_STATUS	200;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;

 

w logach (powycinałem co nie ważne)

 

2011/04/15 16:43:36 [error] 3748#0: *146 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 184.xxxx: site.pl, request: "GET /index.php", upstream: "fastcgi://127.0.0.1:9000",
2011/04/15 16:43:36 [error] 3748#0: *154 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 66.249.66.154, server: upstream: "fastcgi://127.0.0.1:9000",
2011/04/15 16:47:40 [error] 4209#0: *17 connect() failed (111: Connection refused) while connecting to upstream, client: 178.37.102.52, server:
request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.wiki.piwo.org"
2011/04/15 16:47:43 [error] 4209#0: *17 connect() failed (111: Connection refused) while connecting to upstream, client: 178.37.102.52, server: 

2011/04/15 16:49:00 [error] 4209#0: *117 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 80.82.21.93, serv er: www.xxxx upstream: "fastcgi://127.0.0.1:9000", host: 

 

Co ciekawe, kiedy odpalam jakiegoś vhosta na innym porcie niż 80, lub zostawiam tylko jednego vhosta na 80-porcie to pracuje poprawnie. Domyślam się więc, że jest to kwestia tuningu konfiguracji.

Poradzicie ?

Edytowano przez elroy (zobacz historię edycji)

Udostępnij ten post


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

wywal tego spawna, jakos specjalnie go potrzebujesz? To cholerstwo zawsze było mało stabilne.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

wywal tego spawna, jakos specjalnie go potrzebujesz? To cholerstwo zawsze było mało stabilne.

 

A jakie proponujesz rozwiązanie? Nie ukrywam, że kierowałem się opisami znalezionymi w sieci i stąd ten spawncgi.

Udostępnij ten post


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

Kiedyś to nie było wyjścia stąd te opisy, ale od niedawna jest FPM oficjalnie razem z PHP 5.3 i powiem Ci, że jestem zachwycony. Tyle razy co tamto się wysypywało z niewiadomo jakiego powodu to zliczyć nie mogę, a logi FPMa czyste jak łza. Byłem mocno zaskoczony.

 

http://php-fpm.org/

http://php-fpm.org/about/

http://interfacelab.com/nginx-php-fpm-apc-awesome/

http://www.howtoforge.com/installing-php-5.3-nginx-and-php-fpm-on-ubuntu-debian

http://matipl.pl/2010/10/08/php-5-3-3-z-fpm-nginx/

http://nginx.com.pl/instalacja-php5-fpm-nginx/

 

u mnie lata php5.3+fpm+nginx ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

ja co prawda z Lighttpd (bardziej mi przypadł do gustu niż Nginx) ale też z PHP-FPM i jestem szczerze zadowolony ;) polecam sprawdzić

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Tak jak koledzy radzą, tak właśnie robię ;)

Wszystko fajnie, ale mam problem natury tych głupich i wrednych

 

php5-fpm zainstalowałem z paczki

Wygląda to tak

PHP 5.3.5-0.dotdeb.0 (fpm-fcgi) (built: Jan  7 2011 01:24:09)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Suhosin v0.9.32.1, Copyright (c) 2007-2010, by SektionEins GmbH

 

Ale uparcie próbuje wczytywać plik php.ini z katalogu /root choć w odpowiedniej ścieżce php.ini jest.....

Zobaczcie wynik z phpinfo. Jak wywalę php.ini z roota, to skrypty działają, ale phpinfo () zwraca białą stronę...

Zaraz mnie trafi :)

 

 

Gdzie można na stałe podać php-fpm aby czytało dany plik ini ?

post-11182-0-08244700-1302902479.jpg

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ale uparcie próbuje wczytywać plik php.ini z katalogu /root choć w odpowiedniej ścieżce php.ini jest.....

To jaka powinna być ta ODPOWIEDNIA ŚCIEŻKA?

 

to skrypty działają, ale phpinfo () zwraca białą stronę...

Spróbuj zamiast skryptu

<? phpinfo(); ?>

dać

<?php phpinfo(); ?>

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość patrys
To cholerstwo zawsze było mało stabilne.

możesz to jakoś rozwinąć?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

zdaje się że w php.ini:

short_opentag=On

 

Jeśli chodzi o inne php.ini dla każdego workera PHP-FPM ja robię tak że mam ogólne php.ini dla wszystkich a konkretne parametry dla odpowiednich użytkowników (vhostów) daję jako parametry w FPM przez php_admin_value, php_value lub php_flag. Czyli nieco podobnie jak w Apache.

 

Czyli np. część takiego konfiga wygląda tak:

php_admin_value[user_dir] = /home/vhost/$pool
php_admin_value[open_basedir] = /home/vhost/$pool
php_admin_value[upload_tmp_dir] = /home/vhost/$pool/tmp
php_value[include_path] = /home/vhost/$pool
php_admin_value[session.save_path] = /home/vhost/$pool/tmp

 

Czyli każdy vhost ma swój katalog dla sesji, temp-a i ustawiony open_basedir.

Oczywiście można sobie tam wstawić co się chce mieć w konfiguracji jak limity pamięci, wielkości cache (jeśli ktoś używa), rozmiar przesyłanych plików, oddzielne logi itp. itd.

Edytowano przez Life (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Szczerze, to potrzebuję w zasadzie tylko dla jednego vhosta register_globals on - jak to zrobić ?

 

A druga sprawa, mam już pracującego nginxa z php5-fpm ale coś jeszcze nie tak z konfiguracją. Strasznie mi rośnie load. W parę minut osiąga 15-20, a przy włączonym apache mam około 0.3-0.5

 

Konfig php mam taki

fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass backend;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;

 

Czy coś istotnego powinienem zmienić jeszcze istotnego w ustawieniach php-fpm ? Serwer to vps z 1.5Ghz, 384MB ramu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

A jeszcze nginx_status

 

Active connections: 27

server accepts handled requests

168 168 531

Reading: 0 Writing: 1 Waiting: 26

 

Ależ dzisiaj spamuję ;) Ale nie spocznę, jak nie skończę.

 

Wydaje mi się, że sedno tkwi w ustawieniach php5-fpm.conf

 

pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 0

 

Może zmniejszyć pm.start_servers ?

Edytowano przez elroy (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zależy od obciążenia (oglądalności) ale możesz zmniejszyć ilość procesów na starcie na 5-10 i maksymalną na 30 zobaczyć jak to się będzie zachowywać.

 

A load wysoki jest z jakiego powodu? CPU czy dysk? jak CPU to powinno zadziałać jak dysk to już nie koniecznie.

 

Możesz też ustawić pm.max_requests na pocątek na 500 i ewentualnie zwiększać.

Edytowano przez Life (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Load robił się chyba ze względu na zajętość pamięci

 

Zmieniłem na

pm.max_children = 10

pm.start_servers = 2

pm.min_spare_servers = 2

pm.max_spare_servers = 5

pm.max_requests = 500

 

i na razie pracuje stabilnie.

Ogromne dzięki za pomoc!

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Co prawda nginx z fpm sprawuje się iście fantastycznie, to miałbym prośbę o interpretację i wytłumaczenie co znaczą poszczególne informacje z nginx_status

Mam tak:

 

Active connections: 64

server accepts handled requests

73184 73184 187259

Reading: 3 Writing: 1 Waiting: 60

 

Najbardziej interesuje mnie Reading, Writing, Waiting. Co dokładnie znaczy ?

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ę

Zaloguj się, aby obserwować  

×