2012-06-26 21 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())))