Я пишу простой сервис для получения данных из нескольких источников, объединения их вместе и использования клиента Google API для отправки их в Google Sheet. Easy Peasy работает хорошо, данные не такие уж большие.
Проблема в том, что вызов. Spreadsheets () после создания службы api (т.е. build('sheets', 'v4', http=auth).spreadsheets()
) вызывает скачок памяти примерно на 30 мегабайт (я провел некоторое профилирование, чтобы выделить, где выделялась память). При развертывании в GAE эти всплески сохраняются в течение долгого времени (иногда по часам), ползут вверх и после нескольких запросов вызывают ошибку GAE «Превышен предел мягкой частной памяти».
Я использую memcache для документа обнаружения и urlfetch для сбора данных, но это единственные другие службы, которые я использую.
Я пробовал ручную сборку мусора, изменяя потокобезопасность в app.yaml, даже такие вещи, как изменение точки, в которой вызывается. Spreadsheets (), и не могу избавиться от этой проблемы. Также возможно, что я просто неправильно понимаю архитектуру GAE, но я знаю, что всплеск вызван вызовом. Spreadsheets (), и я ничего не храню в локальных кэшах.
Есть ли способ 1) уменьшить размер всплеска памяти из-за вызова. Spreadsheets () или 2) не дать всплескам памяти оставаться в памяти (или, желательно, сделать и то и другое). Ниже приводится очень упрощенная суть, чтобы дать представление о вызовах API и обработчике запросов, при необходимости я могу дать более полный код. Я знаю, что подобные вопросы задавали и раньше, но я не могу это исправить.
https://gist.github.com/chill17/18f1caa897e6a20201232165aca05239