Рейтинг:1

nginx замедляет мою службу отдыха в 5 раз

флаг us

У меня настроена простая служба REST, которая изначально (автономный исполняемый файл) обрабатывает 135 тыс./об/с. Служба работает на локальном хосте: 8181.

Тест autocannon, запущенный на отдельной машине, дает:

— ... ... â â â ¬ â â â ¬ â â ... â
– Стат – 1% – 2,5% – 50% – 97,5% – Ср – Stdev – Мин –
â················································ - ... ... ...
– Запрос/сек – 58335 – 58335 – 109247 – 135039 – 106779,2 – 18509,53 – 58312 –
â················································ - ... ... ...
– байт/с – 9,74 МБ – 9,74 МБ – 18,3 МБ – 22,5 МБ – 17,8 МБ – 3,09 МБ – 9,74 МБ –
âÂâââââââââââ´ââââ ... ... â â ´ ´ ... â

При проксировании с базовой настройкой восходящего потока через nginx производительность резко падает:

— ... ... â â â ¬ â â â ¬ â â ... ¤
– Стат – 1% – 2,5% – 50% – 97,5% – Ср – Stdev – Мин –
â················································ - ... ... ...
– Запрос/сек – 13359 – 13359 – 14991 – 19103 – 15767,12 – 1878,98 – 13352 –
â················································ - ... ... ...
– байт/с – 2,53 МБ – 2,53 МБ – 2,83 МБ – 3,61 МБ – 2,98 МБ – 355 кБ – 2,52 МБ –
âÂâââââââââââ´ââââ ... ... â â ´ ´ ... ¤

Вот мои конфигурации nginx (я немного поэкспериментировал, что привело к очень небольшим улучшениям):

nginx.conf

www-данные пользователя;
рабочие_процессы авто;
pid /run/nginx.pid;
включить /etc/nginx/modules-enabled/*.conf;

События {
    worker_connections 768;
    мульти_принять;
}

http {
    open_file_cache макс=200000 неактив=20с;
    open_file_cache_valid 30 с;
    open_file_cache_min_uses 2;
    open_file_cache_errors включен;

    доступ_лог выключен;
    ошибка_журнала выключена;

    отправить файл включен;
    tcp_nopush включен;
    tcp_nodelay выключен;
    keepalive_timeout 35;
    типы_хэш_макс_размер 2048;

    client_max_body_size 100M;


    включить /etc/nginx/mime.types;
    default_type application/octet-stream;


    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers включен;


    gzip выключен;
    gzip_min_length 10240;
    gzip_comp_level 1;
    gzip_vary включен;
    gzip_disable msie6;
    gzip_proxied просрочил приватную авторизацию без кэша и без хранилища;

    server_tokens отключены;

    включить /etc/nginx/conf.d/*.conf;
    включить /etc/nginx/sites-enabled/*;
}

site-enabled/reverse-proxy.conf

вышестоящий pindap_api {
    наименьшее_соединение; 
    локальный хост сервера: 8181;
}

сервер {
    слушать 80;
    имя_сервера api.pindap;

    доступ_лог выключен;
    ошибка_журнала выключена;

    место расположения / {
        прокси_буферизация выключена;
        прокси_пасс http://pindap_api;
    }
}

сервер {
    слушать 80;

    имя_сервера пиндап;         

        доступ_лог выключен;
        ошибка_журнала выключена;

        место расположения / {
        прокси_буферизация выключена;
        proxy_pass http://localhost:8181;
        }
}

Что может быть причиной этого? Что еще я могу попробовать?

djdomi avatar
флаг za
https://stackoverflow.com/questions/64862439/nginx-reverse-proxy-low-performance - может помочь?
djdomi avatar
флаг za
Мне также не хватает `proxy_http_version 1.1;` и для повторного использования соединения `proxy_set_header Connection "";` для использования keepalive, возможно, это может быть узким местом
enko avatar
флаг us
@djdomi спасибо за ссылку и эти предложения. Я заметил незначительное улучшение (~ +5 тыс. об/с) при добавлении ```proxy_http_version 1.1;``` В противном случае это то же самое. Я пробовал некоторые системные настройки в упомянутом вами посте, диапазон портов был от 32768 до 60999, но с его установкой от 1024 до 65000 - никакого влияния. Мне пришло в голову, что это может быть или не быть, потому что на этом сервере разработки работает рабочий стол Ubuntu 20.04, и может быть какая-то менее очевидная проблема с ядром / конфигурацией. Поэтому я проверю это на выпуске сервера, чтобы увидеть, происходит ли это по-прежнему.
enko avatar
флаг us
быстрое обновление: я решил попробовать другой прокси, просто чтобы посмотреть, не проблема ли это в системе. HAProxy обрабатывает 114k rps. Это все еще медленнее, чем исходные 135 000 об/с, но служба REST работает на той же машине, что и ожидается. Также я считаю, что с конфигурацией HAProxy немного проще работать, поэтому я думаю, что буду использовать ее вместо этого, поскольку этому проекту не нужен статический файловый сервер, и он будет полностью полагаться на микросервисы.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.