Я запускаю простое веб-приложение, которое использует несколько веб-сервисов для каждого запроса, и я обнаружил, что запросы, которые наш сервер делает с тайм-аутом (синтетическая ошибка 599), хотя другая служба всегда реагирует (я это подтвердил).Tornado AsyncHTTPClient запрашивает тайм-аут при средней загрузке
Это вид сообщений об ошибках, которые я получаю:
HTTP 599: Connection timed out after 7005 milliseconds
(тайм-аут при подключении)
HTTP 599: Operation timed out after 5049 milliseconds with 0 out of -1 bytes received
(тайм-аут перед получением данных)
HTTP 599: Operation timed out after 10005 milliseconds with 11197 out of 13047 bytes received
(время с переданными данными частично)
Я смог воспроизвести это в двух разных средах, в мини-экземпляре Amazon EC2 и моем Macbook Pro (i7). В экземпляре EC2 тайм-ауты начинаются с двух одновременных клиентов, выполняющих запросы, Macbook держится до 8 одновременных клиентов, затем он также начинает показывать таймауты.
Я пробовал несколько вещей, таких как обновление версии Tornado (2.2, 2.3.1, 2.4.1 и 3.1.1, если я хорошо помню), изменяя базовую реализацию AsyncHTTPClient от простой по умолчанию до основанной на pycurl и увеличение числа асинхронных клиентов (до 200), но ошибка все еще происходит.
Я не уверен, что я могу быть возможно делать неправильно, потому что это не выглядит как обещанного масштабируемость, что Торнадо должен доставить на всех ...
Любые намеки?
обновление
только для записи, мы использовали memcache
в асинхронном обратном вызове, но библиотека не ASync себя. Я заменил его на: https://github.com/dpnova/tornado-memcache/
Это была самая большая проблема, о которой я думаю, хотя время от времени мы все еще получаем 599.
не спит вообще, но я попробую 'IOLoop.set_blocking_log_threshold' ... Спасибо! :) – fortran
К сожалению, трассировки стека кажутся довольно случайными, так как не существует ни одного места, где выполняется блокировочное вычисление :(Иногда это фрагмент кода, который манипулирует некоторыми ответами json, чтобы сделать их более дружелюбными, в другое время в шаблоне render ... – fortran
Какой порог вы используете? Если вы видите трассировку стека на всех, что предполагает, что вы делаете * что-то, что слишком медленно для использования на неблокирующем сервере. –