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

Я работаю с механизмом приложений довольно давно, я знаю, что есть appstats, но они показывают только datastore / 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

So my question is: what is the best way (on latest appengine sdk) to profile/monitor memory/catch memory leaks and other python-memory related stuff (either on local or Google server)?

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

 Tim Hoffman26 июн. 2012 г., 12:36
Похоже, setsc.so был построен для другой версии Python, учитывая, что вы не могли собрать этот модуль при установке. apptrace работает в dev, я думаю, стоит попытаться запустить его.
 Mohammad Efazati04 июл. 2012 г., 11:41
если вы не используете щедрость, вы теряете очко, и никто не получает его

Ответы на вопрос(5)

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

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

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

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

Решение Вопроса

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

appengine-profiler - профилировщик Google App Engine в Python - хостинг проектов Google - & gt;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

 22 авг. 2013 г., 04:17
Как это ответ на ОП?
 15 февр. 2013 г., 14:11
Но разве это не показывает только информацию об использовании процессора? Как вы можете использовать это, чтобы профилировать использование памяти? (Это то, что просит OP)

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

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

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

logging.info(runtime.memory_usage())

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

current: 464.0859375
average1m: 464
average10m: 379.575

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

 02 мар. 2016 г., 06:13
.current () сообщает 0.0 к сожалению. Я на OSX
 02 мар. 2016 г., 03:06
Что если вы попробуете runtime.memory_usage (). Current ()?
 03 мар. 2016 г., 19:47
Я получил 0.0, когда я запускал его локально. Однако, когда я развернул его в GAE, это сработало. Что произойдет, если вы попытаетесь развернуть его?
 01 мар. 2016 г., 00:58
Это именно то, что мне было нужно, к сожалению, теперь кажется, что memory_usage возвращает пустую строку :(

Pympler:https://github.com/pympler/pympler В настоящее время необходимо удалить & amp; ImportError & apos; часть блока исключений в строке 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('C,ould not perform memory check: %s\n%s' % (str(e), str(traceback.format_exc())))

Ваш ответ на вопрос