Я тестирую серверы приложений 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. Это повлияет на запрос/сек существенно?
Да, спасибо, заметил это. Я обновил код, используя os.fork(). На данный момент работает Benchmark. – vin
Далее следуют: https://github.com/jonashaag/bjoern/blob/master/tests/fork.py Однако Бьорн все еще обрабатывает вдвое больше запросов, чем Gunicorn. Как мне отладить это? Есть два процесса: python (27880) ─┬─python (27921) └─python (27922) – vin
еще одна вещь, которую я заметил, был на Linux 3.2, где SO_REUSEPORT не поддерживается. Это повлияет на запросы/сек существенно? – vin