2015-09-17 2 views
1

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

[WARNING] unable to add HTTP_X_FORWARDED_PROTO=https to uwsgi packet, consider increasing buffer size 
[WARNING] unable to add HTTP_X_FORWARDED_PORT=443 to uwsgi packet, consider increasing buffer size 
[WARNING] unable to add HTTP_X_FORWARDED_PORT=443 to uwsgi packet, consider increasing buffer size 
[WARNING] unable to add HTTP_X_FORWARDED_PORT=443 to uwsgi packet, consider increasing buffer size 
[WARNING] unable to add HTTP_X_FORWARDED_PORT=443 to uwsgi packet, consider increasing buffer size 
[WARNING] unable to add HTTP_USER_AGENT=Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36 to uwsgi packet, consider increasing buffer size 

И следующий достаточно тех, я буду получать эти:

Tue Sep 15 16:57:48 2015 - [DANGER] async queue is full !!! 
Tue Sep 15 16:57:49 2015 - [DANGER] async queue is full !!! 
Tue Sep 15 16:57:50 2015 - [DANGER] async queue is full !!! 
Tue Sep 15 16:57:51 2015 - [DANGER] async queue is full !!! 
Tue Sep 15 16:57:52 2015 - [DANGER] async queue is full !!! 
Tue Sep 15 16:57:53 2015 - [DANGER] async queue is full !!! 
Tue Sep 15 16:57:54 2015 - [DANGER] async queue is full !!! 
Tue Sep 15 16:57:55 2015 - [DANGER] async queue is full !!! 
Tue Sep 15 16:57:56 2015 - [DANGER] async queue is full !!! 
Tue Sep 15 16:57:57 2015 - [DANGER] async queue is full !!! 

В что указывает на то, что мой сервер просто перестает отвечать на запросы, пока не получит перезапуск.

Это имеет тенденцию следовать кто-то посылает кучу поддельно длинных запросов ерунды на сервер, как:

GET /autocomplete/5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 

Я бегу uWSGI за Nginx. Вот моя конфигурация:

[uwsgi] 
socket = 0.0.0.0:1234 
protocol = http 
wsgi-file = path/to/wsgi_server.py 
callable = my_app 
processes = 1 
threads = 1 
enable-threads = true 
single-interpreter = true 
async = 15 
uGreen = true 
logto = /path/to/my_log_file.log 

Любые идеи?

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

ответ

1

У вас возникли две разные проблемы.

Размер фиксированного буфера uWSGI защитил вас от этих запросов «ерунда», так что это в основном исправлено сами по себе.

Проблема полных асинхронных очередей порождается тем фактом, что вы установили свой стек в режиме async + ugreen, и я очень сомневаюсь, что вы переписали приложение с флеш-памятью, используя uwsgi async api.

Помните, что для использования асинхронных режимов (включая gevent) вам необходимо иметь 100% -ное блокирующее приложение, 99.9999999% недостаточно.

Просто злоупотребляйте функциями wWSGI cow, чтобы разделить эту большую структуру данных и увеличить количество процессов. Вы можете абсолютно использовать несколько потоков без изменения вашего приложения, если вы не повторно инициализируете структуру данных для каждого потока (и я даже не уверен, что это легко сделать, поскольку uWSGI не имеет никакого способа сделать это сам)

+0

Спасибо @roberto! Не могли бы вы указать на какие функции CoW вы имеете в виду? Я не могу найти много информации о том, как они работают или как их использовать для обмена данными между работниками. – Eli

Смежные вопросы