AVISO LEGAL: Eu li inúmeros posts aqui, no stackoverflow e em outras páginas e eu não consegui chegar a uma solução, então espero que isso ajude.
Estamos executando um aplicativo Rails no Passenger junto com o nginx e o HAProxy.
Passageiro: 4.0.7 Nginx: 1.4.1
O aplicativo está funcionando bem, mas, de tempos em tempos, as solicitações demoram muito para serem concluídas:
# nginx access.log x.x.x.x - - [19 / Mar / 2015: 01: 07: 19 +0100] "GET / HTTP / 1.0" 499 0 "-" "radar de exploração / 2.0"
A requisição leva muito tempo para terminar, nginx retorna um 499 e o HAProxy converte isso em um 504. Após cerca de 30 minutos, o servidor volta ao normal, mas o erro continua reaparecendo.
Tenho certeza que não tem nada a ver com o HAProxy como um curl para localhost na máquina também retorna um tempo limite.
Não há nada de especial acontecendo no servidor (de acordo com o uso da CPU de 4 núcleos nunca é acima de 10% e dos 8GB sobre apenas 1 GB é usado, o loadavg está abaixo de 0.1 o tempo todo).
Eu configurei o ulimit para 65535.
O arquivo de configuração para o nginx é:
user www-data www-data;
worker_processes 1;
worker_rlimit_nofile 20000;
events {
worker_connections 768;
}
http {
passenger_root /opt/passenger/passenger-4.0.7;
passenger_ruby /usr/bin/ruby1.8;
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# Virtual Hosts
include /opt/nginx/conf/sites-enabled/*;
}
A localização da fusão no nginx é:
server {
charset utf-8;
listen 3101;
root /srv/ruby/code/current/public;
passenger_enabled on;
passenger_base_uri /;
passenger_ruby /home/code/.rbenv/versions/1.9.3-p448/bin/ruby;
passenger_min_instances 3;
passenger_show_version_in_header off;
passenger_friendly_error_pages off;
}
Eu brinquei com vários parâmetros (worker_processes, worker_connections, worker_rlimit_nofile) mas nada ajudou.
Mais alguma sugestão?