#nginx #flask #uwsgi
#nginx #flask #uwsgi
Вопрос:
чтобы представить свою конфигурацию, я следовал этому руководству до раздела «Защита приложения» https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04#step-4-—-configuring-uwsgi Итак, мой файл .ini выглядит следующим образом:
[uwsgi]
module = wsgi:app
master = true
processes = 5
socket = myproject.sock
chmod-socket = 660
vacuum = true
die-on-term = true
В flask я использую SQLAlchemy с такой конфигурацией:
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SQLALCHEMY_POOL_RECYCLE'] = 299
app.config['SQLALCHEMY_POOL_TIMEOUT'] = 20
Мои конечные точки api похожи на это с различными темами, они получают параметры через get, process и возвращают json
@app.route('/api/theme1/subtheme1')
@auth.login_required
def get_test1(): ...
@app.route('/api/theme1/subtheme2')
@auth.login_required
def get_test2(): ...
@app.route('/api/theme1/subtheme3')
@auth.login_required
def get_test3(): ...
Теперь моя проблема, когда, например, я делаю 3 одновременных вызова (не другие вызовы api) к этим 3 конечным точкам, обрабатывающим процесс uwsgi, всплески процесса достигают 25% за вызов.
Я использую крошечный вычислительный движок, просто запускаю это сейчас, оперативная память предназначена для других тестов. n1-highmem-2 (2 VCPU, 13 ГБ памяти)
Я погуглил и поискал здесь, и даже небольшая настройка конфигурации не может снизить загрузку процессора, поэтому я не могу улучшить общую производительность API.
Есть идеи, что я могу делать неправильно? Почему происходит всплеск загрузки процессора? Спасибо!
Комментарии:
1. Я могу придумать 2 вещи. Это может быть проблема с вашими
get_testd()
функциями или вы пытались поиграть с количеством запущенных вами процессов?2. Локальный ответ действительно быстрый (работает flask standalone), он получает 3 поля из таблицы с 1 записью, вот так просто, затем преобразует его в json и возвращает данные. Теперь он использует 25% процессора в каждом из трех вызовов, если я уменьшу его ниже 3, это займет больше времени, я думаю, если я увеличу более чем на 5, у него будет меньше процессора для выполнения работы… какую логику я должен использовать для настройки этого значения? Спасибо!
3. Это просто метод проб и ошибок для подобных вещей. Хотя вы можете захотеть проверить, не включена ли у вас отладка. Я видел сообщения о такого рода проблемах вокруг этого.
4. Я собираюсь попробовать с gunicorn, но мне очень хотелось бы узнать, что здесь происходит, спасибо!
5. Алехандро — После просмотра исходного кода flask-httpauth, я думаю, вам следует попробовать удалить @auth. login_required с каждого из этих маршрутов и повторите попытку. Если нет, то я в тупике. В качестве дополнительного примечания к предыдущим комментариям, общее правило для количества процессоров — процессоры = (2 * ядра процессора) 1.