Профилирование/мониторинг памяти (python) в Google AppEngine

Я работаю с движком приложения довольно долго, я знаю, что есть appstats, но они показывают только хранилище данных /memcache и другие, не связанные с фактической статистикой использования памяти.

Я попытался интегрироваться с AppTrace (со всеми последними версиями компонентов), но я не могу продолжить, так как я получаю эту ошибку:

ImportError: dlopen(../apptrace/guppy/sets/setsc.so, 2): Symbol not found: __PyLong_AsScaledDouble
Referenced from: ../apptrace/guppy/sets/setsc.so
Expected in: flat namespace

Итак, мой вопрос: что лучше всего (на последнем приложении sdk appengine), чтобы профилировать/контролировать утечку памяти/улавливания памяти и другие вещи, связанные с питон-памятью (на локальном или Google-сервере)?

btw, мы используем Python 2.7, и мы работаем над Mac OS X (10.7.4)

Ответ 1

Я думаю, что это лучшая утилита

appengine-profiler - Профайлер Google App Engine в Python - Хостинг Google Project → http://code.google.com/p/appengine-profiler/

08-13 12:40AM 04.586 /camstore/upload 200 508ms 351cpu_ms 293api_cpu_ms 0kb libwww-perl/5.825,gzip(gfe)
11.222.111.222 - - [13/Aug/2010:00:40:05 -0700] "POST /camstore/upload HTTP/1.1" 200 181 - "libwww-perl/5.825,gzip(gfe)"
"example.appspot.com:443" ms=508 cpu_ms=352 api_cpu_ms=293 cpm_usd=0.018512

[I] 08-13 12:40AM 05.021
  Request summary (uptime=161, ID=6C0D1DD1:1.999999999 : Google App Engine/1.3.6 @ na5):
  ms         =  425.66 (api_datastore_v3 =  98%, other =   2%)
  cpu_ms     =  326.67 (api_datastore_v3 =  95%, other =   5%)
  api_cpu_ms =  293.33 (api_datastore_v3 = 100%, other =   0%)

также вы можете использовать memcacheApi и другие staf

Ответ 2

Это сообщение 3 года, однако я думал, что этот ответ по-прежнему стоит поделиться, чтобы помочь другим. У меня есть превосходная поддержка Google App Engine и связался с ними по этой же проблеме.

Инженер Google сообщил мне, что API-интерфейс Google App Engine API времени выполнения устарел, но все еще функционирует. Он предоставляет метод, называемый memory_usage.

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

logging.info(runtime.memory_usage())

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

current: 464.0859375
average1m: 464
average10m: 379.575

Поместив оператор регистрации в ключевые моменты вашего кода, вы можете решить, какая часть вызывает утечку памяти.

Ответ 3

Я думаю, что нет инструментов для мониторинга использования памяти в Google App Engine, вы могли бы профилировать программу, контролировать время импорта модулей, охват кода. Поэтому не инструменты для обнаружения небольших утечек памяти.

Ответ 4

Для альтернатив см. Лучший способ профилировать/оптимизировать веб-сайт на Google Appengine.

Для исправления этой конкретной проблемы этот пост (хотя старый) http://sourceforge.net/tracker/?func=detail&aid=3047282&group_id=105577&atid=641821 предлагает переустановить/обновить guppy.

ps: в следующий раз вы сможете опубликовать полную трассировку, а версии соответствующих библиотек

Ответ 5

Pympler: https://github.com/pympler/pympler В настоящее время необходимо удалить часть "ImportError" из блока except в строке 1330 в asizeof.py(то есть, чтобы он ловил все исключения), поскольку statvfs не используется в GAE:

try:
    from os import statvfs
    _typedef_both(type(statvfs(curdir)), refs=_statvfs_refs,  # statvfs_result
                  item=_sizeof_Cvoidp, leng=_len)
except:  # ImportError: <- Comment out, or add an OSError except as well
    pass

В противном случае отлично работает:

import logging, traceback

try:
  from pympler.asizeof import asizeof
  for variables in [locals(), globals()]:
    logging.debug(str({k: asizeof(variables[k]) for k in variables})

except Exception as e:
  logging.warning('Could not perform memory check: %s\n%s' % (str(e), str(traceback.format_exc())))