2012-06-26 12 views
18

Pracuję z silnikiem aplikacji od dłuższego czasu, wiem, że istnieją appstats, ale te pokazują tylko datastore/memcache i inne niezwiązane z rzeczywistymi statystykami użycia pamięci.Profilowanie/monitorowanie pamięci (python) w Google AppEngine

Próbowałem zintegrować z AppTrace (ze wszystkimi komponentami najnowsze wersje), ale nie może kontynuować, ponieważ otrzymuję ten błąd:

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

Więc moje pytanie brzmi: jaka jest najlepszy sposób (na najnowszym sdk appengine) do profilowania/monitorowania pamięci/przechwytywania wycieków pamięci i innych rzeczy związanych z pamięcią Pythona (na serwerze lokalnym lub serwerze Google)?

btw, używamy Python 2.7 i pracujemy w systemie Mac OS X (10.7.4)

+0

Wygląda setsc.so był prawdopodobnie zbudowany dla innej wersji Pythona, biorąc pod uwagę, że nie mogło być zbudowane, że moduł dotyczący instalacji.apptrace działa w dev, myślę, że warto spróbować go uruchomić. –

+0

jeśli nie użyjesz bounty, stracisz punkt i żadne ciało go nie dostanie – Efazati

Odpowiedz

0

Myślę, że to najlepsze narzędzie

AppEngine-Profiler - Google App Engine profiler w Pythonie - Hosting 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%) 

również można użyć memcacheApi i inne staf

+5

Ale czy to nie pokazuje tylko informacji o użyciu procesora? Jak można tego użyć do profilowania użycia pamięci? (O to właśnie pyta OP) – payala

+3

W jaki sposób jest to dokładnie odpowiedź na OP? –

2

myślę, że nie ma narzędzi do monitorowania wykorzystania pamięci w Google App Engine, można profil programu, moduł monitora razy importu , Pokrycie kodu. Więc nie narzędzia do wykrywania małych wycieków pamięci.

4

Ten post ma 3 lata, ale myślałem, że ta odpowiedź jest nadal warta udostępnienia, aby pomóc innym. Mam wsparcie dla aplikacji Google App Engine i skontaktowałem się z nimi w sprawie tego samego problemu.

Inżynier Google poinformował mnie, że Google App Engine runtime API jest przestarzały, ale nadal działa. Zapewnia metodę o nazwie memory_usage.

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

logging.info(runtime.memory_usage()) 

Spowoduje to wydrukowanie statystyk użycia pamięci, gdzie liczby są wyrażone w MB. Na przykład:

current: 464.0859375 
average1m: 464 
average10m: 379.575 

Umieszczając instrukcję logowania w kluczowych punktach kodu, można ustalić, która część powoduje wyciek pamięci.

+0

To jest dokładnie to, czego potrzebowałem, niestety teraz wydaje się, że memory_usage zwraca pusty ciąg :( –

+0

Co jeśli spróbujesz runtime.memory_usage(). Current()? – Milo

+0

.current() raporty 0.0 niestety. Jestem na OSX –

0

Pympler: https://github.com/pympler/pympler Obecnie trzeba usunąć część "ImportError z działalności z wyjątkiem bloku w linii 1330 w asizeof.py (czyli tak łapie wszystkie wyjątki) jako statvfs nie nadaje się do użytku na 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 

Inaczej działa perfekcyjnie:

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()))) 
Powiązane problemy