nginx + uwsgi + python2.7 придумали узкое место, которое не может пройти тест 20000x40000 - PullRequest
0 голосов
/ 27 сентября 2011

У меня возникает узкое место, что мой сервер не может пройти тест 20000x40000 независимо от того, какие настройки я внес. Сервер имеет 128G Ram и процессор с ядром Xeon 6, centos5.6-64bit, в хорошем состоянии.

я пробую комбинации, в том числе:

nginx + uwsgi + python2.7
nginx + apache + mod_wsgi + python2.7
apache + mod_wsgi + python2.7

ни один из них не смог пройти через апачский бенчмаркинг:

ab -c 20000 -n 40000 (without -k)

и, по совпадению, почти все тесты не прошли около 32000 запросов

подробности о nginx и uwsgi:

Nginx:

worker_processes  24
use epoll
worker_connections  65535

uwsgi:

listen 2048
master true
workers 24
uwsgi -x /etc/uwsgi_conf.xml --async 256 --file /var/www/example.py &

У кого-нибудь есть идеи по этому поводу? Заранее благодарим за любые возможные решения и предложения

1 Ответ

2 голосов
/ 27 сентября 2011

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

Прежде всего необходимо увеличить количество временных портов, очередь невыполненных заданий сокета, количество разрешенных файловых дескрипторов на процесс и т. Д. ...

В дополнение к этому (этого должно быть уже достаточно, чтобы остановить такой нереалистичный тест), вы должны увеличить количество асинхронных ядер в uWSGI до 20k. Ничего плохого в этом нет (каждое ядро ​​потребляет меньше страницы памяти), но в вашей системе будет по крайней мере 40 КБ открытого сокета.

Это для nginx + uwsgi.

В Apache вы получите 20 000 процессов или потоков, что даже хуже, чем 40 000 открытых сокетов.

...