@Garik111

Nginx + Puma Rails. Почему медленно работает? Как проверить в чем дело?

Всем привет.

Возник вопрос по скорости взаимодействия обратного сервере nginx и сервера приложений puma.
Приложение написано на Ruby on Rails.
Puma отображает страничку за 30 мс, передает ее в nginx.
Nginx отдает ее в браузер за 300 мс.
Что он делает более 260 мс. Как понять в чем проблема? Как оптимизировать?

Сайт jobsgalore.eu

Пример лога puma
I, [2019-12-13T19:20:49.032799 #851]  INFO -- : [fde336ca-e704-47e4-9f1a-e400509be1a7] Started GET "/jobs/6865856" for 176.59.131.200 at 2019-12-13 19:20:49 +1100
I, [2019-12-13T19:20:49.033816 #851]  INFO -- : [fde336ca-e704-47e4-9f1a-e400509be1a7] Processing by JobsController#show as HTML
I, [2019-12-13T19:20:49.033863 #851]  INFO -- : [fde336ca-e704-47e4-9f1a-e400509be1a7]   Parameters: {"id"=>"6865856"}
I, [2019-12-13T19:20:49.040195 #851]  INFO -- : [fde336ca-e704-47e4-9f1a-e400509be1a7]   Rendering jobs/show.html.slim within layouts/application
I, [2019-12-13T19:20:49.057853 #851]  INFO -- : [fde336ca-e704-47e4-9f1a-e400509be1a7]   Rendered inc/_summary.html.slim (Duration: 0.9ms | Allocations: 306)
I, [2019-12-13T19:20:49.058839 #851]  INFO -- : [fde336ca-e704-47e4-9f1a-e400509be1a7]   Rendered inc/btn/_btn_send.html.slim (Duration: 0.1ms | Allocations: 46)
I, [2019-12-13T19:20:49.058927 #851]  INFO -- : [fde336ca-e704-47e4-9f1a-e400509be1a7]   Rendered inc/_btn.html.slim (Duration: 0.4ms | Allocations: 168)
I, [2019-12-13T19:20:49.060076 #851]  INFO -- : [fde336ca-e704-47e4-9f1a-e400509be1a7]   Rendered jobs/show/_show_md.html.slim (Duration: 19.1ms | Allocations: 10401)
I, [2019-12-13T19:20:49.060249 #851]  INFO -- : [fde336ca-e704-47e4-9f1a-e400509be1a7]   Rendered jobs/show.html.slim within layouts/application (Duration: 20.0ms | Allocations: 11779)
I, [2019-12-13T19:20:49.061178 #851]  INFO -- : [fde336ca-e704-47e4-9f1a-e400509be1a7]   Rendered inc/_logo.html (Duration: 0.0ms | Allocations: 9)
I, [2019-12-13T19:20:49.061292 #851]  INFO -- : [fde336ca-e704-47e4-9f1a-e400509be1a7]   Rendered inc/header/inc/_print.html.slim (Duration: 0.2ms | Allocations: 69)
I, [2019-12-13T19:20:49.062594 #851]  INFO -- : [fde336ca-e704-47e4-9f1a-e400509be1a7]   Rendered inc/header/inc/_search.html.slim (Duration: 1.1ms | Allocations: 1530)
I, [2019-12-13T19:20:49.062906 #851]  INFO -- : [fde336ca-e704-47e4-9f1a-e400509be1a7]   Rendered inc/header/_client_drop_menu.html.slim (Duration: 0.2ms | Allocations: 114)
I, [2019-12-13T19:20:49.062985 #851]  INFO -- : [fde336ca-e704-47e4-9f1a-e400509be1a7]   Rendered inc/header/_header_md.html.slim (Duration: 2.0ms | Allocations: 1970)
I, [2019-12-13T19:20:49.063403 #851]  INFO -- : [fde336ca-e704-47e4-9f1a-e400509be1a7]   Rendered inc/_footer.html.erb (Duration: 0.2ms | Allocations: 179)
I, [2019-12-13T19:20:49.063589 #851]  INFO -- : [fde336ca-e704-47e4-9f1a-e400509be1a7] Completed 200 OK in 30ms (Views: 16.5ms | ActiveRecord: 7.6ms | Allocations: 16912)


nginx.conf

user www-user;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
multi_accept on;
use epoll;
}

http {
  upstream puma {
    server unix:///home/ubuntu/apps/JobsGalore/shared/tmp/sockets/JobsGalore-puma.sock;
}

  server {
  
    
   open_file_cache max=200000 inactive=20s; 
   open_file_cache_valid 30s; 
   open_file_cache_min_uses 2;
   open_file_cache_errors on;

    sendfile on;
    tcp_nodelay on;
    tcp_nopush on;
  
    server_name jobsgalore.eu www.jobsgalore.eu;
 
    if ($host ~* www.) {
       return 301 https://$server_name$request_uri;
    }

    root /home/ubuntu/apps/JobsGalore/current/public;
    access_log /home/ubuntu/apps/JobsGalore/current/log/nginx.access.log;
    error_log /home/ubuntu/apps/JobsGalore/current/log/nginx.error.log info;
    
    gzip on;
    gzip_disable "msie6";
    gzip_min_length 10240;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript; 
    gzip_comp_level 4;
 
    
    location ^~ /assets/ {
      gzip_static on;
      expires max;
      add_header Cache-Control public;
    }

    try_files $uri/index.html $uri @puma;
    location @puma {
      if ($http_user_agent ~* AhrefsBot|MJ12bot|Detectify|dotbot|Riddler|SemrushBot|LinkpadBot|BLEXBot|FlipboardProxy|MauiBot|HubSpot|masscan|DotBot|Python|zgrab){ return 403; }
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header Host $http_host;
      proxy_redirect off;

      proxy_pass http://puma;
    }
    


    error_page 500 502 503 504 /500.html;
    client_body_buffer_size 10K;
    client_header_buffer_size 8k;
    client_max_body_size 8m;
    large_client_header_buffers 8 32k;
    reset_timedout_connection on;   
  
    listen 443 ssl http2; # managed by Certbot
    
    ssl_certificate /etc/letsencrypt/live/jobsgalore.eu/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/jobsgalore.eu/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
  
    keepalive_timeout   70;
    keepalive_requests 1000;
   
 }
   server {
     server_name jobsgalore.eu www.jobsgalore.eu;
     listen 80 http2;
     
    if ($host = www.jobsgalore.eu) {
        return 301 https://jobsgalore.eu$request_uri;
    } # managed by Certbot


    if ($host = jobsgalore.eu) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
 }

   server {
     server_name jobsgalore.eu www.jobsgalore.eu;
     listen 443 http2;
     if ($host = www.jobsgalore.eu) {
        return 301 https://jobsgalore.eu$request_uri;
    } # managed by Certbot
  }
}
  • Вопрос задан
  • 252 просмотра
Пригласить эксперта
Ответы на вопрос 2
fzfx
@fzfx
18,5 дм
между "Puma отображает страничку за 30 мс, передает ее в nginx" и "Nginx отдает ее в браузер за 300 мс." есть ещё "Puma занята передачей странички в nginx". я бы добавил в nginx логирование времени выполнения запроса на backend и плясал дальше от этой информации.
https://docs.nginx.com/nginx/admin-guide/monitorin...
Ответ написан
2ord
@2ord
Надо замерить время выдачи страницы сервером Puma и от этого плясать дальше. Если оно близко к 30мс от RoR, то нужно выяснять относительно конфигурации nginx.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы