Предпосылки / обзор :
У нас есть веб-приложение 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
) в контейнер докера приложения все становится быстро перестает отвечать.
Наблюдения
Мысли / TL; DR
У нас что-то не так с конфигурацией нашей новой среды разработки / Проект, который, похоже, вызывает медленную скорость ввода-вывода. Ранее эта конфигурация работала параллельно с нашей промежуточной средой в другом проекте. Наши утки кажутся стоящими в ряд из всего, что мы видим и можем придумать, но мы явно чего-то упускаем. Мы будем благодарны за любую помощь и идеи.
Решением было создать новый проект. Настраиваем точно так же, за исключением использования AppEngine Standard вместо Flex. Затем мы просто обновили переменные среды, чтобы использовать новый идентификатор проекта, идентификатор корзины и ключ учетной записи службы, и все сработало.
Либо у нас был неверный параметр конфигурации в нашем старом проекте, либо на стороне GCP произошло что-то странное. Мне все еще кажется очень странным, что новый экземпляр без трафика (и, следовательно, ни один из наших кодов не выполнялся) умирает просто из-за запуска apt-get
при обстреле контейнера.