Google AppEngine上的内存分析/监控(python)

时间:2012-06-26 07:22:01

标签: python google-app-engine memory-leaks

我一直在使用app引擎很长一段时间,我知道有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

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

不过,我们使用的是Python 2.7,我们正在使用Mac OS X(10.7.4)

5 个答案:

答案 0 :(得分:6)

这篇文章是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

通过将日志记录语句放在代码中的关键点,可以确定哪个部分导致内存泄漏。

答案 1 :(得分:2)

我认为没有工具来监控Google App Engine中的内存使用情况,您可以分析程序,监控模块导入时间,代码覆盖率。所以不是检测小内存泄漏的工具。

答案 2 :(得分:2)

Pympler:https://github.com/pympler/pympler 目前必须删除asizeof.py中第1330行的except块的'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())))

答案 3 :(得分:1)

有关替代方案,请参阅Best way to profile/optimize a website on google's appengine

为了解决这个问题,这篇文章(虽然陈旧)http://sourceforge.net/tracker/?func=detail&aid=3047282&group_id=105577&atid=641821建议重新安装/更新孔雀鱼。

ps:下次你可以发布完整的追溯和相关库的版本

答案 4 :(得分:0)

我认为这是最好的实用工具

appengine-profiler - Python中的Google App Engine分析器 - Google Project Hosting - &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