Speicherleck in Google NDB-Bibliothek
Ich denke, es gibt ein Speicherverlust in derndb
Bibliothek, aber ich kann nicht finden, wo.
Gibt es eine Möglichkeit, das unten beschriebene Problem zu vermeiden?
Haben Sie eine genauere Vorstellung davon, wie Sie testen können, um herauszufinden, wo das Problem liegt?
So habe ich das Problem reproduziert:
Ich habe eine minimalistische Google App Engine-Anwendung mit 2 Dateien erstellt.app.yaml
:
application: myapplicationid
version: demo
runtime: python27
api_version: 1
threadsafe: yes
handlers:
- url: /.*
script: main.APP
libraries:
- name: webapp2
version: latest
main.py
:
# -*- coding: utf-8 -*-
"""Memory leak demo."""
from google.appengine.ext import ndb
import webapp2
class DummyModel(ndb.Model):
content = ndb.TextProperty()
class CreatePage(webapp2.RequestHandler):
def get(self):
value = str(102**100000)
entities = (DummyModel(content=value) for _ in xrange(100))
ndb.put_multi(entities)
class MainPage(webapp2.RequestHandler):
def get(self):
"""Use of `query().iter()` was suggested here:
https://code.google.com/p/googleappengine/issues/detail?id=9610
Same result can be reproduced without decorator and a "classic"
`query().fetch()`.
"""
for _ in range(10):
for entity in DummyModel.query().iter():
pass # Do whatever you want
self.response.headers['Content-Type'] = 'text/plain'
self.response.write('Hello, World!')
APP = webapp2.WSGIApplication([
('/', MainPage),
('/create', CreatePage),
])
Ich habe die Anwendung mit dem Namen @ hochgelade/create
Einmal
anach wird bei jedem Aufruf von/
erhöht den von der Instanz verwendeten Speicher. Bis zum Stillstand wegen des FehlersExceeded soft private memory limit of 128 MB with 143 MB after servicing 5 requests total
.
Beispiel für ein Diagramm zur Speicherauslastung (Sie können das Wachstum und die Abstürze des Speichers sehen):
Hinweis: Das Problem kann mit einem anderen Framework als @ reproduziert werdwebapp2
, mögenweb.py