Тесты веб-сервера Python ниже ожидаемых - PullRequest
0 голосов
/ 24 января 2019

У меня есть сервер приложений cherrrypy, который сидит за nginx (обратный прокси). Cherrypy запускается как процесс-демон на ядро ​​(мой сервер - 4 ядра), а nginx (также настроенный на 4 рабочих) выполняет балансировку нагрузки для входящих запросов.

Я проверяю, как получить первую страницу моего веб-приложения, используя эй . Для значений 200 одновременных запросов и в общей сложности 10 тыс. Запросов я достигаю 400-500 оборотов в секунду. Я должен быть в состоянии справиться по крайней мере в 10 раз. Когда я смотрю на гистограмму:

 Response time histogram:
  0.014 [1] |
  0.721 [9193]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  1.429 [693]   |■■■
  2.137 [13]    |
  2.844 [0]     |
  3.552 [88]    |
  4.259 [0]     |
  4.967 [0]     |
  5.674 [0]     |
  6.382 [0]     |
  7.089 [12]    |

Очень странно, что некоторые запросы обрабатываются так долго (1,5-7 секунд), учитывая, что в обработчике URL главной страницы нет операций ввода-вывода, просто генерируем статический шаблон и отправляем его поверх.

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

1 Ответ

0 голосов
/ 24 января 2019

В дополнение к тому, что вы упомянули, рассмотрим автоматический python сборщик мусора .

Если вам нужно 500 X 10 запросов в секунду, то пул потоков CherryPy / Cheroot (по умолчанию 10 потоков)) будет нелегко, если вы не увеличите размер пула потоков и, возможно, не добавите больше процессоров для запуска большего количества демонов CherryPy.

Если у вас 4 демона и пул потоков по умолчанию, то фактически CherryPy имеет 4 X 10 = 40потоки, которые могут работать одновременно (без учета планировщика ОС и GIL).

Для вида нагрузки, который вы описываете, сервер на основе асинхронных событий / событий кажется более подходящим.Или вам нужно быть более умным в вашем прокси-сервере nginx, пытаясь обслуживать что-либо статическое непосредственно из nginx и только какой-то запрос для достижения CherryPy.

...