Когда приложение heroku начинает работать после ошибки H12? - PullRequest
0 голосов
/ 25 сентября 2019

Когда я сталкиваюсь с ошибкой H12 в приложении rails, если я heroku restart, он сразу же запускается и снова запускается.

Когда (если вообще когда-нибудь) приложение снова заработает без heroku restart?(например, периодически ли приложения heroku автоматически перезагружаются, или память периодически очищается, или что-то еще?)

1 Ответ

1 голос
/ 25 сентября 2019

Ошибка H12 означает, что обработка запроса заняла более 30 секунд.Это не обязательно является признаком проблемы с памятью.

Ваше приложение ruby ​​может одновременно обрабатывать только конечное число запросов.Это количество потоков * количество процессов, которые запускает ваш веб-сервер (единорог или пума).

Если у вас есть длительные запросы, из-за загрузки файла, вызова базового API или медленного запроса SQLнапример, этот запрос занимает один из этих конечных слотов.Если у вас их слишком много, любой новый входящий запрос должен будет подождать, пока не освободится один слот.

Когда Heroku завершает HTTP-запрос, который занимает более 30 секунд, он не может сказать вашему приложению, может ли запрос нуженбыть отмененнымПоэтому, если у вас длинная очередь запросов, вы можете оказаться в состоянии, когда все запросы заканчиваются в H12, даже прежде чем они начнут обрабатываться приложением.

Перезапуск приложения исправляет его, поскольку он очищает запросqueue.

Лучший способ решить эту проблему - использовать гем типа rack-timeout , который уничтожит любой запрос, который займет больше времени, чем вы установили.Разумное значение может составлять около 1 или 2 секунд.

См. Эту документацию по тайм-аутам от Devokter Heroku: https://devcenter.heroku.com/articles/request-timeout

Обратите внимание, что такая же проблема может возникнуть с вашей базой данных, если у васвыполнение SQL-запросов.Поэтому установка времени ожидания оператора для SQL-запросов также полезна: https://devcenter.heroku.com/articles/heroku-postgres-database-tuning#identify-and-fix-expensive-queries

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...