Налаштування nginx worker_process для отримання 100k звернень за хв


115

У нас є сервер, який обслуговує один html-файл.

Зараз у сервера є 2 процесора та 2 ГБ оперативної пам’яті. З blitz.io ми отримуємо близько 12 к з’єднань в хвилину і десь з 200 тайм-аутів за ці 60 секунд з 250 одночасними з'єднаннями щосекунди.

worker_processes  2;

events {
 worker_connections 1024;
}

Якщо я збільшить час очікування, час реакції починає повзати за секунду.

Що ще я можу зробити, щоб вичавити з цього більше соку?

Відповіді:


188

Налаштування файлу:

worker_processes  4;  # 2 * Number of CPUs

events {
    worker_connections  19000;  # It's the key to high performance - have a lot of connections available
}

worker_rlimit_nofile    20000;  # Each connection needs a filehandle (or 2 if you are proxying)


# Total amount of users you can serve = worker_processes * worker_connections

детальніше: Оптимізація nginx для великих навантажень трафіку


14
Я думаю, що рівняння, що надається для загальної кількості користувачів за секунду, є неправильним. Натомість середня кількість користувачів, що обслуговується в секунду, повинна бути = worker_process * worker_connections / (keepalive_timeout * 2) Тому вищевказаний конф-файл може сервер ~ 7,6 К з'єднань за секунду, що набагато вище того, що потрібно @ablemike. Однак, task_rlimit_nofile є хорошою директивою для використання, якщо ulimit є обмежувальним і ви не хочете її змінювати.
Ітан

2
@Ethan, чому його слід розділити на 2? Якщо щосекунди ми отримуємо 100 нових з'єднань, а час очікування - 5, то, запускаючи шосту секунду, ми постійно матимемо 5 * 100 з'єднань, які все ще не припиняються на стороні сервера. у нас може бути менше, якщо деякі користувачі перервали з’єднання сам
Bulat

3
ця формула не працює, якщо встановлено значення 0s (вимкнено)
Tilo

5
Кожне з'єднання потребує 2 файлових ручок навіть для статичних файлів, таких як images / JS / CSS. Це як 1 для підключення клієнта і 2 для відкриття статичного файлу. Тому безпечніше міняти підключення на робочий_рліміт_нофільм = 2 * робочий_зв'язок.
Етан

4
Використовуйте Working_rlimit_nofile, але слід також зателефонувати "ulimit -n", щоб встановити значення кількості відкритих файлів за процес. Це краще зробити в сценарії init.
Етан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.