Как мне настроить Nginx, чтобы максимизировать пропускную способность для одного приложения Ruby, запущенного на Passenger? - PullRequest
0 голосов
/ 25 февраля 2019

Я хочу протестировать Nginx + Passenger, и мне интересно, есть ли что-нибудь, что можно отрегулировать в следующем nginx.conf для повышения пропускной способности и уменьшения задержки.Это работает на 4-ядерном i7 (8 аппаратных потоков) с 16 ГБ основной памяти.

load_module /usr/lib/nginx/modules/ngx_http_passenger_module.so;

# One per CPU core:
worker_processes auto;

events {
}

http {
    include mime.types;
    default_type application/octet-stream;

    access_log off;

    sendfile on;

    keepalive_timeout 60;

    # 8 should be number of CPU threads.
    passenger_root /usr/lib/passenger;
    passenger_max_pool_size 8;

    server {
        listen [::]:80;
        server_name passenger;

        root /srv/http/benchmark/public;

        passenger_enabled on;
        passenger_min_instances 8;
        passenger_ruby /usr/bin/ruby;
        passenger_sticky_sessions on;
    }
}

Я использую wrk с несколькими одновременными подключениями (например, 100).

Вот некоторые конкретные проблемы:

  • Можно ли еще улучшить конфигурацию Nginx?
    • Использует ли он постоянные соединения HTTP / 1.1 с серверами приложений Passenger?
    • Использование динамического модуля вызывает проблемы с производительностью?
    • Нужно ли что-либо еще делать длямаксимизировать эффективность работы интеграции?
    • Я не установил файл журнала пассажиров, чтобы гарантировать, что регистрация ввода-вывода не является узким местом.
  • Относительно числапроцессов - у меня 8 аппаратных потоков, поэтому я настроил на использование минимум 8 экземпляров.
    • Имеет ли смысл использовать потоки для каждого сервера приложений?Я предполагаю, что это относится только к рабочим нагрузкам, связанным с вводом-выводом.
    • Если я привязываю процессоры с 8 серверами приложений, означает ли это достаточное количество серверов?Или я должен попробовать, скажем, 16?
  • Какая разница в производительности между Nginx + Passenger и Passenger Standalone?

1 Ответ

0 голосов
/ 26 февраля 2019

Passenger dev here.

«Можно ли еще улучшить конфигурацию Nginx?»

Возможно, у Nginx много рычагов, и если все, что вы делаетеобслуживает известные полезные нагрузки в тесте, тогда вы можете серьезно повысить производительность, например, с помощью кэширования Nginx.

«Использует ли он постоянные соединения HTTP / 1.1 с серверами приложений Passenger?»

Нет, он использует сокеты Unix.

"Использование динамического модуля вызывает проблемы с производительностью?"

Нет, когда nginx загружает библиотеку, делаявызов функции в нее такой же, как и любой другой вызов функции c ++.

«Нужно ли делать что-то еще, чтобы максимизировать эффективность работы интеграции?»

Возможно, вы захотите изучить турбо-кеширование Пассажира и / или nginx-кеширование.

"Я не установил файл журнала пассажира, чтобы гарантировать, что регистрация ввода-вывода не является узким местом".

Хорошо, но включиуровень ведения журнала уменьшен до 0, чтобы избежать небольшой обработки.

"Имеет ли смысл использовать потоки на сервер приложений?Я предполагаю, что это относится только к рабочим нагрузкам, связанным с вводом-выводом. "

Не совсем точно, что вы имеете в виду, вы говорите о поддержке многопоточности Пассажира или nginx?

" Если япривязка процессоров к 8 серверам приложений, означает ли это достаточное количество серверов? "

Если вы привязаны к ЦП, добавление дополнительных процессов не поможет.

«Какова ожидаемая разница в производительности между Nginx + Passenger и Passenger Standalone?»

Не так много, Passenger автономно использует nginx внутри. Вы можете увидеть некоторые улучшения, если вы используете встроенный движок с автономным пассажиром, ноэто означает, что вы не можете использовать кэширование, что гораздо важнее.

...