He estado luchando con el siguiente problema desde hace un tiempo y agradecería mucho su ayuda.
Mi servidor web falla por completo de forma regular debido a demasiados subprocesos php. El número de procesos php es estable dentro de un rango normal (por ejemplo, 35 procesos). La cantidad de subprocesos por proceso aumenta constantemente con el tiempo. Después de un par de horas, la suma total de todos los subprocesos en todos los procesos php supera los 900, y es entonces cuando las operaciones normales del servidor comienzan a cerrarse.
Así es como cuento el número de procesos y subprocesos:
ps axo pid,nlwp,cmd | grep "pool www"
15674 11 php-fpm: pool www
15675 13 php-fpm: pool www
15676 8 php-fpm: pool www
15677 7 php-fpm: pool www
15678 12 php-fpm: pool www
...y 30 líneas más así
Estoy corriendo
- un servidor virtual
- 8 GB de RAM
- 4 núcleos virtuales
- Ubuntu 16.04
- nginx 1.10.3
- php-fpm 7.0.3
mi .../fpm/pool.d/www.conf se ve así (orden alfabético):
user = www-data
request_terminate_timeout = 600s
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 35
pm.max_requests = 500
pm.max_children = 72
pm = dynamic
listen.owner = www-data
listen.group = www-data
listen = /run/php/php7.0-fpm.sock
group = www-data
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
env[PATH] = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
env[HOSTNAME] = $HOSTNAME
Y mi configuración de nginx se ve así:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
# multi_accept on;
}
http {
client_max_body_size 501m;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 3;
types_hash_max_size 2048;
server_names_hash_max_size 8192;
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $host $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
map $status $loggable {
~^404 0;
default 1;
}
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log ;
gzip on;
gzip_disable "msie6";
application/xml+rss text/javascript;
gzip_min_length 1100;
gzip_vary on;
gzip_comp_level 2;
gzip_proxied any;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 50;
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=YOURAPP:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
upstream php {
server unix:/run/php/php7.0-fpm.sock;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
}
server {
listen 443 ssl;
server_name www.mydomain.com;
root /var/www/path/to/webfiles;
# ssl specs here
# some general location stuff here
location ~ \.php$ {
regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;
try_files $fastcgi_script_name =404;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_index index.php;
include fastcgi.conf;
fastcgi_cache_bypass 1;
fastcgi_no_cache 1;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_cache YOURAPP;
fastcgi_cache_valid 200 60m;
fastcgi_read_timeout 600s;
}
}
Parece haber una conexión con el servicio z-push que se ejecuta en el servidor. Se utiliza para sincronizar datos del servidor (contactos, calendario, correo) con dispositivos móviles. Después de cerrar ese servicio en particular, la cantidad de subprocesos deja de funcionar. Hasta ahora no pude encontrar una configuración para z-push/nginx/php que me permita usar la sincronización sin inundar el servidor. Intenté usar la configuración "estática" y "bajo demanda" para generar procesos php, pero eso no hizo ninguna diferencia significativa.
Agradecería cualquier sugerencia o aclaración.
Gracias de antemano
Steve
Respuesta1
El problema estaba de alguna manera relacionado con Kopano Core. Cuando actualicé eso hace un mes a la versión 8.6.82, todos los problemas relacionados con los subprocesos desaparecieron en una instancia. Mejor tarde que nunca. ¡Gracias a todos por vuestros consejos!