Использование профилирующей памяти в App Engine

Как я могу профилировать использование памяти (ОЗУ) в приложении App Engine? Я пытаюсь устранить ошибки, связанные с превышением предела памяти экземпляра. Я пробовал эти вещи, и пока они не работают или не предоставляют то, что мне нужно.

  • Appstats. Это не предоставляет информацию об использовании памяти.
  • Apptrace. Он не обновляется с 2012 года и зависит от устаревшей версии SDK. Не работает из коробки.
  • Appengine-profiler. Не обеспечивает статистику памяти.
  • Gae-mini-profiler, в котором используется cProfile. Не обеспечивает статистику памяти.
  • guppy. После загрузки и установки кода библиотеки в моей папке приложения запуск guppy.hpy() завершается с помощью ImportError: No module named heapyc
  • resource. Не является частью SDK-версии python, поэтому я не могу ее использовать.

Неужели я ошибаюсь в отношении любого из вышеперечисленных? В ответе на наивысший рейтинг (а не на принятом) в этом говорится, что нет способа отслеживать использование памяти в App Engine. Это не может быть правдой. Может ли это?

ИЗМЕНИТЬ

Я могу подтвердить, что профилировщик GAE mini выполняет эту работу. После установки я могу изменить настройки в пользовательском интерфейсе на "выборку с памятью", а затем увидеть это показание:

Example UI showing memory usage

Благодаря всем contributors!

Ответ 1

GAE Mini Profiler действительно обеспечивает статистику памяти, если вы используете профайлер пробоотбора и установите memory_sample_rate ненулевое значение; при каждом снимке он укажет вам память, которая была в использовании. Вы захотите повернуть частоту выборки вниз, так как образец памяти занимает несколько мс для выполнения.

Изменить: способ, которым он получает статистику памяти, из GAE API времени выполнения, который устарел, но все еще работал с последним, что я знал; Я не уверен, есть ли хорошая замена.

Ответ 2

Чтобы добавить к ответ Ben, по состоянию на 16 ноября 2015 года, несмотря на то, что он устарел, API приложений Google App Engine. Официальной замены Google пока нет.

from google.appengine.api.runtime import runtime
import logging

logging.info(runtime.memory_usage())

Будет выводиться статистика использования памяти, где числа выражаются в МБ. Например:

current: 464.0859375
average1m: 464
average10m: 379.575