Nginx 与 Passenger 请求超时(nginx 状态码 499)

Nginx 与 Passenger 请求超时(nginx 状态码 499)

免责声明:我已经阅读了这里、stackoverflow 和其他页面上的大量帖子,但我无法找到解决方案,所以希望这会有所帮助。

我们正在 Passenger 上与 nginx 和 HAProxy 一起运行 Rails App。

乘客:4.0.7 Nginx:1.4.1

应用程序运行良好,但有时请求需要很长时间才能完成:

# nginx access.log xxxx - - [19/Mar/2015:01:07:19 +0100] "GET / HTTP/1.0" 499 0 "-" "runscope-radar/2.0"

请求花费的时间太长,nginx 返回 499,HAProxy 将其转换为 504。大约 30 分钟后,服务器恢复正常,但错误不断重复出现。

我很确定它与 HAProxy 无关,因为对机器上的 localhost 的 curl 也会返回超时。

服务器上没有什么特别的事情发生(根据 htop,4 核的 CPU 使用率从未超过 10%,并且 8GB 中只有大约 1GB 被使用,loadavg 始终低于 0.1)。

我将 ulimit 设置为 65535。

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/*;
    }

nginx 中的 phusion 位置为:

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;
}

我尝试了各种参数(worker_processes、worker_connections、worker_rlimit_nofile),但没有任何帮助。

还有其他建议吗?

相关内容