Nginx не может обрабатывать большое количество запросов

У меня есть сценарий, в котором nginx находится перед сервером Artifactory. Недавно при попытке вытащить большое количество изображений докеров в цикле for, все одновременно (первый тест был с 200 изображениями, второй тест с 120 изображениями), доступ к Artifactory был заблокирован, так как nginx занят обработкой всех запросы, и пользователи не смогут до него добраться.

Мой сервер nginx работает с 4 ядрами процессора и 8192 оперативной памятью.

Я попытался улучшить обработку файлов на сервере, добавив следующее:

sendfile on;
sendfile_max_chunk 512k;
tcp_nopush on;

Это сделало его немного лучше (но, конечно, загрузка изображений размером 1 ГБ + занимает гораздо больше времени из-за размера блока) - тем не менее, доступ к пользовательскому интерфейсу вызывал бы много тайм-аутов.

Есть ли что-то еще, что я могу сделать для повышения производительности nginx, когда через него проходит большая нагрузка?

Я думаю, что мой последний вариант - увеличить размер машины (больше процессоров), а также количество процессов на nginx (с 8 до 16).

Полный файл nginx.conf следует ниже:

user              www-data;
worker_processes 8;
pid        /var/run/nginx.pid;

events {
  worker_connections  19000;
}

http {
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    gzip on;
    gzip_disable "msie6";
    sendfile on;
    sendfile_max_chunk 512k;
    tcp_nopush on;

    set_real_ip_from 138.190.190.168;
        real_ip_header    X-Forwarded-For;

        log_format custome '$remote_addr - $realip_remote_addr - $remote_user [$time_local] $request_time'
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent"';


    server {
            listen 80 default;
            listen [::]:80 default;
            server_name _;
            return 301 https://$server_name$request_uri;
    }
    ###########################################################
    ## this configuration was generated by JFrog Artifactory ##
    ###########################################################

    ## add ssl entries when https has been set in config
    ssl_certificate      /etc/ssl/certs/{{ hostname }}.cer;
    ssl_certificate_key  /etc/ssl/private/{{ hostname }}.key;
    ssl_session_cache shared:SSL:1m;
    ssl_prefer_server_ciphers   on;
    ## server configuration
    server {
        listen 443 ssl;
        server_name ~(?<repo>.+)\.{{ hostname }} {{ hostname }} _;

        if ($http_x_forwarded_proto = '') {
            set $http_x_forwarded_proto  $scheme;
        }
        ## Application specific logs
        access_log /var/log/nginx/{{ hostname }}-access.log custome;
        error_log /var/log/nginx/{{ hostname }}-error.log warn;
        rewrite ^/$ /webapp/ redirect;
        rewrite ^//?(/webapp)?$ /webapp/ redirect;
        rewrite ^/(v1|v2)/(.*) /api/docker/$repo/$1/$2;
        chunked_transfer_encoding on;
        client_max_body_size 0;
        location / {
            proxy_read_timeout  900;
            proxy_max_temp_file_size  10240m;
            proxy_pass_header   Server;
            proxy_cookie_path   ~*^/.* /;
            proxy_pass          http://{{ appserver }}:8081/artifactory/;
            proxy_set_header    X-Artifactory-Override-Base-Url $http_x_forwarded_proto://$host:$server_port;
            proxy_set_header    X-Forwarded-Port  $server_port;
            proxy_set_header    X-Forwarded-Proto $http_x_forwarded_proto;
            proxy_set_header    Host              $http_host;
            proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
        }
    }
}

Спасибо за советы.

Ваше здоровье, Рикардо

Откуда вы знаете, что ограничивающим процессом является Nginx, а не Artifactory?

aventurin 10.09.2018 10:19

У меня есть мониторинг, и я могу выделить пик - и это на nginx, а не на Artifactory. Тем не менее, я запускаю новый тест непосредственно на артефакте (минуя обход), чтобы исключить этот сценарий.

Ricardo 10.09.2018 11:32

Кажется, что невозможно протестировать напрямую с Artifactory для образов докеров ... Но я снова перепроверил grafana, и Artifactory был на 25% загрузке ЦП, в то время как nginx достиг пика при максимальном доступном процессоре. Кроме того, использование диска на nginx было очень высоким (но, вероятно, из-за размера образа, так как не хватало памяти, и он собирался на диск).

Ricardo 10.09.2018 11:57

Можете ли вы протестировать Nginx без включенного TLS?

aventurin 10.09.2018 15:22
0
4
162
0

Другие вопросы по теме