Vraag Geheugenprofilering / monitoring (python) op Google App Engine


Ik werk al geruime tijd met app-engine, ik weet dat er appstats zijn, maar die geven alleen datastore / memcache weer en andere zijn niet gerelateerd aan werkelijke geheugengebruiksstatistieken.

Ik heb geprobeerd om te integreren met AppTrace (met alle nieuwste versies van de componenten) maar ik kan niet doorgaan, omdat ik deze fout krijg:

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

Dus mijn vraag is: wat is de beste manier (op de nieuwste app-vaardigheidsskd) om geheugen / vanggeheugenlekken en andere python-geheugengerelateerde zaken te profieleren / monitoren (hetzij op de lokale server of op de Google-server)?

trouwens, we gebruiken Python 2.7 en we werken aan Mac OS X (10.7.4)


18
2018-06-26 07:22


oorsprong


antwoorden:


Ik denk dat dit het beste nut is

appengine-profiler - Google App Engine profiler in Python - Google Project Hosting -> 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%)

ook kunt u memcacheApi en andere medewerkers gebruiken


0
2018-06-29 18:55



Deze post is 3 jaar oud, maar ik dacht dat dit antwoord nog steeds de moeite waard is om anderen te helpen. Ik heb premium Google App Engine-ondersteuning en heb contact met ze opgenomen over hetzelfde probleem.

De Google-technicus adviseerde mij de Google App Engine runtime API is verouderd, maar werkt nog steeds. Het biedt een methode met de naam memory_usage.

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

logging.info(runtime.memory_usage())

Hierdoor worden geheugengebruiksstatistieken weergegeven, waarbij de getallen worden uitgedrukt in MB. Bijvoorbeeld:

current: 464.0859375
average1m: 464
average10m: 379.575

Door de loginstructie op belangrijke punten in uw code te plaatsen, kunt u bepalen welk onderdeel een geheugenlek veroorzaakt.


6
2017-11-16 22:09



Ik denk dat er geen hulpmiddelen zijn om het geheugengebruik in de Google App Engine te controleren, je kunt het profiel van het programma profileren, de invoertijden van de modules controleren, de codedekking. Dus geen tools om kleine geheugenlekken te detecteren.


2
2018-06-29 18:49



Voor alternatieven zie Beste manier om een ​​website te profileren / optimaliseren op de app van Google.

Voor het oplossen van dit specifieke probleem, deze post (hoewel oud) http://sourceforge.net/tracker/?func=detail&aid=3047282&group_id=105577&atid=641821 stel voor om guppy opnieuw te installeren / bij te werken.

ps: de volgende keer kun je de volledige traceback en de versies van de relevante bibliotheken posten


1
2018-06-29 17:51



Pympler: https://github.com/pympler/pympler Momenteel moet het 'ImportError'-gedeelte van het behalve blok op regel 1330 in asizeof.py worden verwijderd (d.w.z. het bevat dus alle uitzonderingen), aangezien statvf's niet bruikbaar zijn op 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

Anders werkt het perfect:

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())))

1
2017-08-17 16:10