Squeak.ru - шаблоны программирования

uwsgi + nginx + тест веб-сервиса pypy

Как лучше всего протестировать простую веб-службу Python, развернутую с помощью uwsgi nginx и pypy?

Как я могу узнать ожидаемый средний результат в соответствии со спецификацией моего оборудования?

Я использовал аб:

root@# ab -kc 10 -n 1000 http://domain:8080/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking domain (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        
Server Hostname:        domain
Server Port:            8080

Document Path:          /
Document Length:        11 bytes

Concurrency Level:      10
Time taken for tests:   21.567 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    0
Total transferred:      55000 bytes
HTML transferred:       11000 bytes
Requests per second:    46.37 [#/sec] (mean)
Time per request:       215.673 [ms] (mean)
Time per request:       21.567 [ms] (mean, across all concurrent requests)
Transfer rate:          2.49 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      103  109  63.1    104    1107
Processing:   103  105   1.6    105     109
Waiting:      103  105   1.6    105     109
Total:        206  214  63.2    209    1215

Percentage of the requests served within a certain time (ms)
  50%    209
  66%    210
  75%    210
  80%    215
  90%    216
  95%    216
  98%    216
  99%    216
 100%   1215 (longest request)

Но я не знаю, нормальные эти значения или нет. Мне кажется очень очень медленно. 46 об/с только при 10 одновременных подключениях?

когда я использую 100 одновременных подключений, мой веб-сервер падает и не отвечает

Где я неправ ?

Когда я использовал 1000 одновременных подключений, ab не может завершить тест.

Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
apr_socket_recv: Connection reset by peer (104)
Total of 9894 requests completed

Запустил uwsgi в виртуальной среде:

uwsgi --http :8080 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats :9191

Мое оборудование: 2 ГБ оперативной памяти, 2 ядра (линод 2 ГБ)


Ответы:


1

Новичок здесь, но я постараюсь помочь. Цифры, которые вы видите, нормальные, и я не думаю, что вы обязательно что-то неправильно настроили. 10 одновременных подключений означают, что тест имеет десять одновременных потоков, выполняющих запросы одновременно. Скорость запросов в секунду, которую вы видите, на самом деле является количеством полученных запросов, а не скоростью ответов вашего сервера.

Чтобы понять скорость вашего сервера, вы должны посмотреть на «Время на запрос», которое является временем ответа. Это время, необходимое одному параллельно подключенному потоку для выполнения запроса и получения полного ответа. В этом случае 215 мс — хорошее среднее значение. Приведенная ниже разбивка особенно полезна, так как показывает, что 90% запросов были обработаны менее чем за 216 мс, что близко к вашему среднему значению, и показывает, что скорость ответов вашего сервера довольно постоянна. Попробуйте увеличить количество одновременных процессов или количество запросов, отправляемых каждым процессом. Это увеличит значение вашего запроса в секунду и усилит нагрузку на ваш сервер. Затем вы можете оценить, какое время отклика следует ожидать при определенном количестве запросов в секунду (нагрузка трафика в реальном времени).

Надеюсь это поможет!

23.06.2014
  • когда я использовал 1000 одновременных подключений, ab не смог завершить тест: выполнено 9000 запросов apr_socket_recv: сброс соединения узлом (104) Всего выполнено 9894 запроса 23.06.2014
  • @MatandDie, похоже, эта проблема более непосредственно связана с тем, как uWSGI взаимодействует с nginx. Вы пытались увеличить размер буфера? Если вы получаете большие запросы или много запросов, вы можете увеличить размер буфера примерно до 64 КБ в uWSGI с помощью buffer-size=65535. 23.06.2014
  • тот же результат с параметром размера буфера. Кстати большое спасибо :) 23.06.2014
  • Я почти уверен, что nginx возвращает ошибку 104. Это просто означает, что соединение принудительно закрывается. Вы проверили свои журналы uWSGI? Они могут указывать что-то вроде 502: Bad Gateway, что является реальной причиной проблемы. См. аналогичный вопрос (но с PHP) здесь: respon" title="nginx errors recv failed 104 соединение сброшено узлом при чтении ответа">serverfault.com/questions/543999/ 23.06.2014
  • Остаются ли цифры стабильными после 1000? Возможно, PyPy все еще разогревается, поэтому попробуйте также с 3000 или 5000, просто чтобы посмотреть. Кроме того, возможно, попробуйте только один поток на процесс. 24.06.2014
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...