Утечка памяти в библиотеке Google ndb
Я думаю, что есть утечка памяти вndb
библиотека но не могу найти где.
Есть ли способ избежать проблемы, описанной ниже?
У вас есть более точное представление о тестировании, чтобы выяснить, где проблема?
Вот как я воспроизвел проблему:
Я создал минималистское приложение Google App Engine с 2 файлами.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),
])
Я загрузил приложение под названием/create
один раз.
После этого каждый звонок/
увеличивает память, используемую экземпляром. Пока не остановится из-за ошибкиExceeded soft private memory limit of 128 MB with 143 MB after servicing 5 requests total
.
Пример графика использования памяти (вы можете увидеть рост памяти и сбои):
Примечание: проблема может быть воспроизведена с другой структурой, чемwebapp2
, лайкweb.py