Tengo un servidor ubuntu y un sitio web bastante cargado. Servidor es:Nginx y php-fpm: no se puede deshacer de los errores 502 y 504
- Dedicado a nginx, utiliza php-FPM (sin Apache), mysql se encuentra en diferente máquina
- tiene 8 GB de RAM
- recibe alrededor de 2.000 solicitudes por segundo.
Cada proceso php-FPM consume alrededor de 65 MB de RAM, de acuerdo con top
comando:
Memoria libre:
[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
Últimamente, estoy experimentando grandes problemas de rendimiento. los tiempos de respuesta muy grandes, muy numerosos Gateway Timeouts
y en las noches, cuando la carga se eleva, el 90% de los usuarios sólo ver en lugar de la página web (me parece que no puede reproducir este) "Servidor no encontrado"
REGISTROS
registro de erroresMi Nginx está llena de los mensajes de barbecho:
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"
que he intentado cambiar al socket de Unix, pero aún así obtener esos errores:
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"
y log php-FPM está llena de estos:
[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
He tratado para aumentar los parámetros dados hasta 100
, pero todavía no parece suficiente.
CONFIGS
Aquí está mi configuración actual
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;
}
}
}
Estaría muy agradecido por cualquier consejo sobre cómo identificar el problema y qué parámetros puedo ajustar para solucionarlo. ¿O quizás 8 GB de RAM no son suficientes para este tipo de carga?
no estoy muy seguro acerca de los detalles de su configuración, pero es posible que desee para calcular la cantidad de memoria que podría estar consumiendo. Una suposición rápida sería que sus 130 niños de 65mb necesitan 8,5 gigas (sin usar realmente ningún cerebro para el problema 1000/1024, pero sin contar otros procesos). Comenzaría por verificar si tienes memoria suficiente para tener a todos esos niños corriendo con todos los demás procesos, por supuesto. – Nanne
65mb es bastante para una página web. Verificaría por qué la aplicación web está tan hambrienta de recursos. Aparte de eso, todo es lógico. 502 ocurre cuando nginx no recibió una respuesta adecuada de php5-fpm en el tiempo. ADVERTENCIA: [www piscina] parece ocupado sucede cuando php5-FPM no puede crear una más clild proceso para procesar la próxima consulta –
Probablemente, los procesos PHP-FPM se bloquean en el acceso de MySQL. – VBart