GCP App Engine Гибкая среда Медленный дисковый ввод-вывод

Предпосылки / обзор :

У нас есть веб-приложение Python с тремя средами в двух проектах: промежуточная / разработка и производство. Они размещаются в GCP с использованием гибкой среды Google App Engine, Cloud SQL и корзины GCP для статических файлов. Эти среды работают хорошо и очень отзывчивы. Мы решили разделить промежуточные среды / среды разработки на два отдельных проекта, чтобы мы могли настроить промежуточную среду так, чтобы они были ближе к производственной.

Проблема :

Мы создали проект разработки таким же образом, как и наш постановочная среда. Однако экземпляр перестает отвечать после того, как несколько запросов от рабочих Gunicorn в конечном итоге истекут. После дальнейшего исследования с использованием драйвера стека и наверху мы заметили, что экземпляр App Engine тратит много времени на ожидание ввода-вывода. Top постоянно сообщает, что время ожидания процессора (wa) составляет около 90%. Кроме того, когда мы пытаемся подключиться к экземпляру по SSH, мы обнаруживаем, что подключение занимает много времени, иногда 5 или более минут, а иногда вообще не удается подключиться.Как только мы попадаем внутрь, опыт работы с оболочкой сильно отстает. Использование команд docker, таких как docker container ls , иногда занимает несколько минут, чтобы вернуть список контейнеров, а иногда не возвращает результатов и приводит к перезапуску экземпляра, с другой стороны, использование top работает хорошо. Когда мне удается попасть в контейнер докеров, в котором запущено наше приложение, опыт почти такой же, но трудно отследить, какие операции ввода-вывода вызывают проблемы, поскольку оболочка быстро перестает отвечать. Кроме того, если мы позволим приложению простаивать около получаса, мы можем последовательно запустить оболочку экземпляра, но после обстрела ( docker exec -it [id] / bin / bash ) в контейнер докера приложения все становится быстро перестает отвечать.

Наблюдения

  • Использование памяти ~ 800 Мб, свободно ~ 200 Мб. Виртуальная память не используется.
  • ЦП обычно использует только однозначные числа, в основном система (не считая ожидания ввода-вывода).
  • Использование ЦП и оперативной памяти базы данных крайне низкое. База данных также использует SSD.
  • Google Cloud Bucket правильно настроен и заполняется статическими файлами при развертывании.
  • Попытка удалить экземпляры и восстановить их не решает проблему.
  • Отправка новых версий не приводит к решить проблему.
  • Увеличение тайм-аута рабочих Gunicorn помогает предотвратить возвращение ошибок приложением, но в конечном итоге запросы начинают истекать, или экземпляр перезапускается.
  • Мы проверили, что переменные среды были правильно обновлены чтобы отразить новое имя проекта GCP, сегмент и базу данных.
  • Две другие среды, в которых используется тот же код, работают хорошо.

Мысли / TL; DR

У нас что-то не так с конфигурацией нашей новой среды разработки / Проект, который, похоже, вызывает медленную скорость ввода-вывода. Ранее эта конфигурация работала параллельно с нашей промежуточной средой в другом проекте. Наши утки кажутся стоящими в ряд из всего, что мы видим и можем придумать, но мы явно чего-то упускаем. Мы будем благодарны за любую помощь и идеи.

0
задан 4 July 2019 в 23:56
1 ответ

Решением было создать новый проект. Настраиваем точно так же, за исключением использования AppEngine Standard вместо Flex. Затем мы просто обновили переменные среды, чтобы использовать новый идентификатор проекта, идентификатор корзины и ключ учетной записи службы, и все сработало.

Либо у нас был неверный параметр конфигурации в нашем старом проекте, либо на стороне GCP произошло что-то странное. Мне все еще кажется очень странным, что новый экземпляр без трафика (и, следовательно, ни один из наших кодов не выполнялся) умирает просто из-за запуска apt-get при обстреле контейнера.

0
ответ дан 23 November 2019 в 23:06

Теги

Похожие вопросы