2017-01-07 1 views
0

Я тестирую серверы приложений WSGI для python.Python App Servers (Bjoern vs Gunicorn)

Я бег Бьорна следующим образом:

bjoern.run(wsgi_app, host, port) 

И Gunicorn как таковые:

gunicorn -w 2 --bind 0.0.0.0:5000 gun_server:wsgi_app --log-level=DEBUG --timeout 90 

Однако я наблюдаю, что Бьорн обрабатывает половине стольких запросов, как Gunicorn. У узла, на котором я сравниваю, есть 2 vCPU.

В соответствии со многими статьями, опубликованными до сих пор (например, например) https://dzone.com/articles/a-performance-analysis-of-python-wsgi-servers-part Бьорн, как предполагается, лучше справляется со многими запросами в секунду по сравнению с Gunicorn.

Вслед за этим, чтобы позволить Bjoren работать на нескольких ядрах https://github.com/jonashaag/bjoern/blob/master/tests/fork.py

Однако Бьорн все еще обрабатывает только немного более, чем половина запроса обрабатывается с помощью Gunicorn

Bjoren, похоже, использует несколько ядер:

[email protected]:~/api/src$ ps -U $USER -o pid,psr,comm | grep python 
27880 1 python 
27921 1 python 
27922 1 python 
[email protected]:~/api/src$ ps -U $USER -o pid,psr,comm | grep python 
27880 1 python 
27921 1 python 
27922 0 python 
[email protected]:~/api/src$ ps -U $USER -o pid,psr,comm | grep python 
27880 1 python 
27921 1 python 
27922 1 python 
[email protected]:~/api/src$ ps -U $USER -o pid,psr,comm | grep python 
27880 1 python 
27921 1 python 
27922 1 python 
[email protected]:~/api/src$ ps -U $USER -o pid,psr,comm | grep python 
27880 1 python 
27921 0 python 
27922 0 python 

Любые идеи как отладить это?

[UPDATE] Я нахожусь на 3.2.0-115-виртуальном, который не поддерживает SO_REUSEPORT. Это повлияет на запрос/сек существенно?

ответ

1

Bjoern использует одно ядро, в качестве пушки используется два сердечника. Поэтому имеет смысл, что стрельба обрабатывает (~ 2 раза) больше запросов.

+0

Да, спасибо, заметил это. Я обновил код, используя os.fork(). На данный момент работает Benchmark. – vin

+0

Далее следуют: https://github.com/jonashaag/bjoern/blob/master/tests/fork.py Однако Бьорн все еще обрабатывает вдвое больше запросов, чем Gunicorn. Как мне отладить это? Есть два процесса: python (27880) ─┬─python (27921) └─python (27922) – vin

+0

еще одна вещь, которую я заметил, был на Linux 3.2, где SO_REUSEPORT не поддерживается. Это повлияет на запросы/сек существенно? – vin