Ho un ubuntu-server e un sito Web piuttosto alto. Server è:Nginx e php-fpm: impossibile eliminare gli errori 502 e 504
- Dedicato a Nginx, usa php-FPM (senza apache), mysql si trova su una macchina diversa
- dispone di 8 GB di RAM
- Ottiene circa 2000 richieste al secondo.
Ogni processo php-fpm consuma circa 65 MB di RAM, secondo top
comando:
Memoria libera:
[email protected]:~$ free -m
total used free shared buffers cached
Mem: 7910 7156 753 0 284 2502
-/+ buffers/cache: 4369 3540
Swap: 8099 0 8099
PROBLEMA
Ultimamente, sto riscontrando grossi problemi di prestazioni. tempi di risposta molto grandi, molto numerosi Gateway Timeouts
e nella sera, quando il carico diventa alto, il 90% degli utenti basta vedere "Server non trovato" al posto del sito web (non riesco a riprodurre questo)
TRONCHI
mio Nginx registro errori è pieno di messaggi maggese:
2012/07/18 20:36:48 [error] 3451#0: *241904 upstream prematurely closed connection while reading response header from upstream, client: 178.49.30.245, server: example.net, request: request: "GET /readarticle/121430 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9001", host: "example.net", referrer: "http://example.net/articles"
ho cercato di passare a presa unix, ma ancora ottenere questi errori:
2012/07/18 19:27:30 [crit] 2275#0: *12334 connect() to unix:/tmp/fastcgi.sock failed (2: No such file or directory) while connecting to upstream, client: 84.
237.189.45, server: example.net, request: "GET /readarticle/121430 HTTP/1.1", upstream: "fastcgi://unix:/tmp/fastcgi.sock:", host: "example.net", referrer: "http
://example.net/articles"
e log php-FPM è piena di questi:
[18-Jul-2012 19:23:34] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 75 total children
Ho cercato di aumentare determinati parametri fino a 100
, ma sembra ancora sufficiente.
CONFIGS
Ecco la mia configurazione attuale
php-fpm
listen = 127.0.0.1:9001
listen.backlog = 4096
pm = dynamic
pm.max_children = 130
pm.start_servers = 40
pm.min_spare_servers = 10
pm.max_spare_servers = 40
pm.max_requests = 100
nginx
worker_processes 4;
worker_rlimit_nofile 8192;
worker_priority 0;
worker_cpu_affinity 0001 0010 0100 1000;
error_log /var/log/nginx_errors.log;
events {
multi_accept off;
worker_connections 4096;
}
http {
include mime.types;
default_type application/octet-stream;
access_log off;
sendfile on;
keepalive_timeout 65;
gzip on;
# fastcgi parameters
fastcgi_connect_timeout 120;
fastcgi_send_timeout 180;
fastcgi_read_timeout 1000;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
client_max_body_size 128M;
server {
server_name example.net;
root /var/www/example/httpdocs;
index index.php;
charset utf-8;
error_log /var/www/example/nginx_error.log;
error_page 502 504 = /gateway_timeout.html;
# rewrite rule
location/{
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?path=$1 last;
}
}
location ~* \.php {
fastcgi_pass 127.0.0.1:9001;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include fastcgi_params;
}
}
}
Sarei molto grato per qualsiasi consiglio su come identificare il problema e quali parametri posso regolare per risolvere questo problema. O forse 8 GB di RAM non sono sufficienti per questo tipo di carico?
Non sono molto sicuro delle specifiche della configurazione, ma è possibile calcolare la quantità di memoria che si sta consumando. Una rapida ipotesi potrebbe essere che i tuoi 130 bambini a 65 MB ciascuno necessitano di 8,5 gig (non si usano realmente cervelli per il problema 1000/1024, ma non si contano altri processi). Vorrei iniziare controllando se hai abbastanza memoria per far correre tutti quei bambini con tutti gli altri processi di gioco. – Nanne
65mb è abbastanza per una pagina web. Vorrei verificare perché l'app Web è così affamata di risorse. Oltre a questo tutto è logico. 502 accade quando nginx non ha ricevuto una risposta adeguata da php5-fpm nel tempo. ATTENZIONE: [pool www] sembra occupato quando php5-fpm non è in grado di creare un altro processo Clild per elaborare la successiva query –
Probabilmente i processi php-fpm sono bloccati in accesso MySQL. – VBart