2012-06-26 22 views
18

我一直在使用app引擎一段时间,我知道有appstats,但那些只显示datastore/memcache和其他与实际内存使用情况统计无关。谷歌AppEngine上的内存分析/监控(python)

我试图用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 

所以我的问题是: 什么最好的方式(在最新的appengine sdk上)来配置/监视内存/ catch内存泄漏和其他python内存相关的东西(在本地或谷歌服务器上)?

顺便说一句,我们使用Python 2.7,我们在Mac OS X(10.7.4)

+0

貌似setsc.so可能是一个不同的Python版本的建成,给你不可能建立在安装该模块。apptrace确实在开发中工作,我认为它的价值试图让它运行。 –

+0

如果你不使用赏金,你松点,没有身体得到它 – Efazati

回答

0

我觉得这是最好的工具

AppEngine上,探查 - 在Python谷歌应用程序引擎探查器 - 谷歌项目托管 - >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

+5

但是,这不只是显示CPU使用信息?你如何使用它来分析内存使用情况? (这是OP所要求的) – payala

+3

这是对OP完全的答案吗? –

2

我觉得有没有工具来监控在谷歌App Engine的内存使用的版本中,可以配置文件程序,监控模块的导入时间,代码覆盖率。所以不是检测小内存泄漏的工具。

4

这篇文章是3岁,但我认为这个答案仍然值得分享,以帮助其他人。我有优质的Google App Engine支持,并就此问题与他们联系。

Google工程师告诉我Google App Engine runtime API已被弃用,但仍然有效。它提供了一个名为memory_usage的方法。

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

logging.info(runtime.memory_usage()) 

这将输出内存使用统计信息,其中数字以MB为单位。例如:

current: 464.0859375 
average1m: 464 
average10m: 379.575 

通过将日志语句放置在代码中的关键点处,可以计算出导致内存泄漏的部分。

+0

这正是我所需要的,不幸的是现在似乎memory_usage返回一个空字符串:( –

+0

如果你尝试runtime.memory_usage()。current()? – Milo

+0

.current()报告0.0不幸的是我在OSX –

0

Pympler:https://github.com/pympler/pympler 目前具有线1330在asizeof.py除去的所述“的ImportError”部分除块(即所以它捕获所有异常),为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())))