Rails Passenger 切换成 Puma 之后,流量图出现了一些奇怪的变化

happyming9527 · 2018年05月07日 · 最后由 happyming9527 回复于 2018年05月12日 · 2408 次阅读

我用的一直是亚马逊的 ec2,昨天,我把我正式站 rails 应用,由 passenger 改成了 puma。在日活没有多少变化的情况下,负载均衡网卡的流量图发生了显著的变化。我不明白为啥 incoming 流量会比昨天高很多,也比 outgoing 的流量高很多。请问这跟我切换成 puma 有什么关系?

2018-05-05 的流量

2018-05-06 的流量

我是在 15:20 切换成 puma 的。可以说流量图立竿见影发生了变化。求教社区各位大神,这变化是好的么? 客户端对网络请求有超时重试的机制。难道是用 puma 之后,很多请求被放到队列里面。没有及时返回,造成客户端重发请求么?

这统计的是 Nginx 的出入网流量?

IChou 回复

@IChou 是统计的 nginx 所在服务器的网卡的流量,这个服务器也只运行着 nginx。

proxy_pass 的值设置的啥?不是走的 lo 吧

这应该是 NGINX 放给后端的流量吧,puma 多进程多线程,某一时刻响应的请求量会比 passenger 多进程的多的原因吧

kimigao1986 回复

这个道理说不通,外部来的流量并没有真的增加

看这个图,流量正好是翻倍了,我估计他 proxy_pass 也走了 eth0 这张网卡

IChou 回复

我们现在服务器的架构是 1 个 ELB(外部)->2 个 NGINX(做反向代理,跨域等控制)->1 个 ELB(内部)->多台 api 服务器的 PUMA 问题中发的图是其中 1 台 nginx 的网卡流量图 nginx 的配置如下

server {
        listen       80;
        server_name  api.xxxxxx.com;
        access_log  logs/api.xxxxxx.com_access.log  main;
        error_log   logs/api.xxxxxx.com_error.log;
        location / {
            resolver 172.16.0.2 valid=10s;
            resolver_timeout 5s;
            set $elb_backend "http://internal-PE-FF-Prod-ELB-Internal-01-xxxxxx.eu-central-1.elb.amazonaws.com:3000";
            proxy_pass $elb_backend;
            proxy_http_version 1.1;
            proxy_set_header Host $http_host;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_buffering off;
            if ($http_user_agent ~ (Baiduspider|Sogou|Python-urllib|Googlebot)) {
            return 403;
            }
        }
        location /nginx-status {
            stub_status on;
            access_log  off;
            error_log off;

            allow 127.0.0.1;
        }

   }
IChou 回复

看起来原来 incoming 和 outgoing 的流量是 1:1 的样子,改成 puma 之后,变成 2:1 了,这都很奇怪啊。

哟 不是单机问题呀 ~

之前 passenger 也是用的这个架构么?也用了内部 ELB?

IChou 回复

@IChou 是的,一模一样的架构

@happyming9527

看看两台 Nginx 是否都是同一个症状,outgoing 变化不大,incoming 翻倍的话,可以排查一波是不是有大量重试了

重发请求的可能不是客服端,而是你们的外部 ELB

IChou 回复

我查查,谢谢!

12 楼 已删除
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;

感觉这几行都有点问题,尤其是强制 Upgrade

nouse 回复

@nouse 去掉了前面两行。图表没有变化。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号