Если в вашем случае действительно произошла утечка памяти, вам необходимо проверить свой код, так как это последовательно приведет к сбою приложения. Есть и другие посты, например , этот , в котором обсуждаются инструменты и стратегии для решения проблем с памятью в коде Python.
Возможно, вы можете использовать Dataflow или Cloud Functions в вашем проекте. Если вы предоставите более подробную информацию о природе вашего варианта использования в отдельном вопросе, можно было бы оценить, могут ли эти варианты стать лучшей альтернативой вашему текущему подходу App Engine.
Наконец, разделение вашего приложения на несколько сервисов, вероятно, является лучшим долгосрочным решением вашей проблемы, поскольку это облегчит поиск утечки памяти, контроль затрат и общее обслуживание вашего приложения.
В документации App Engine есть несколько страниц, на которых обсуждаются лучшие практики проектирования микросервисов с использованием App Engine [1] [2] [3]. Надлежащие приложения на основе микросервиса позволяют, помимо прочих преимуществ, чистая регистрация и мониторинг , а также повышение надежности и масштабируемости приложения [1]. Эти преимущества, которые я упомянул здесь, важны для вас. Следуя схеме, описанной в [4], вы можете масштабировать свои услуги индивидуально и независимо друг от друга. Если вы считаете, что одна из ваших служб требует больше ресурсов, вы можете настроить параметры масштабирования, чтобы обеспечить оптимальную производительность для этой службы. Например, вы можете управлять количеством экземпляров, которые запускаются во время операций.
Вы можете использовать элементы приложения max_concurrent_requests
и target_throughput_utilization
, которые вы можете определить в файле конфигурации вашего App Engine, файле app.yaml. Смотри [5]. Чтобы уточнить, вы хотите уменьшить ваш max_concurrent_requests
в вашем случае.
Обратите внимание, что, как обсуждалось в предыдущих комментариях, эта дорога может привести к повышению затрат. Если вы используете бесплатный уровень, вам нужно будет проверить [4] на наличие доступных вам ресурсов на этом уровне.
Что касается вопроса о том, что экземплярам не хватает памяти, если вы обнаружите, что это происходит не из-за утечки памяти, тогда другим решением будет использование другого instance_class
, что означает, что вы можете создавать экземпляры App Engine с более высоким вычислить ресурсы (также более высокие затраты). Пожалуйста, смотрите [5] и [6].
[1] https://cloud.google.com/appengine/docs/standard/python/microservices-on-app-engine
[2] https://cloud.google.com/appengine/docs/standard/python/designing-microservice-api
[3] https://cloud.google.com/appengine/docs/standard/python/microservice-performance
[4] https://cloud.google.com/appengine/docs/standard/python/an-overview-of-app-engine
[5] https://cloud.google.com/appengine/docs/standard/python/config/appref
[6] https://cloud.google.com/appengine/docs/standard/#instance_classes