Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 减轻GAE中的内存泄漏_Python_Google App Engine - Fatal编程技术网

Python 减轻GAE中的内存泄漏

Python 减轻GAE中的内存泄漏,python,google-app-engine,Python,Google App Engine,即使在GAE上我的应用程序流量很低的情况下,实例的内存也会慢慢积累并超过120兆字节的限制 目前,我看到该服务的流量很大,相应地,这些内存错误出现的速度也在上升。目前,它们每三分钟发生一次 如何缓解这些内存泄漏?有哪些常见错误会导致这样的内存累积 在维护548之后,超过了130.719 MB的软专用内存限制 请求总数 代码示例: import BaseHandler import webapp2 import time #for time stuff import json #for outp

即使在GAE上我的应用程序流量很低的情况下,实例的内存也会慢慢积累并超过120兆字节的限制

目前,我看到该服务的流量很大,相应地,这些内存错误出现的速度也在上升。目前,它们每三分钟发生一次

如何缓解这些内存泄漏?有哪些常见错误会导致这样的内存累积

在维护548之后,超过了130.719 MB的软专用内存限制 请求总数

代码示例:

import BaseHandler
import webapp2

import time #for time stuff
import json #for output to app

class MainHandler(BaseHandler.BaseHandler):
    def respondjson(self, obj):
        self.response.headers['Content-Type'] = 'application/json'
        rawjson = json.dumps(obj)
        self.response.write(rawjson)

    def get(self):
        thetime = int(time.time())
        #thetime += 86400 * 2
        #thetime += 60 * 20
        self.respondjson({'t':thetime})

app = webapp2.WSGIApplication([
    ('/gettime', MainHandler)
], debug=True)
这个API只是在json响应中返回时间

BaseHandler看起来像这样

import webapp2
import logging #for exception logging

class MissingparameterError(Exception):
     def __init__(self, value):
         self.value = value
     def __str__(self):
         return repr(self.value)

class BaseHandler(webapp2.RequestHandler):
    def handle_exception(self, exception, debug_mode):
        # http://webapp-improved.appspot.com/guide/exceptions.html

        if not isinstance(exception, MissingparameterError):
            # Log the error. We don't want to log errors of kind MissingparameterError.
            logging.exception(exception)
            #self.response.set_status(500)
            # Set a custom message.

        self.response.write('An error occurred.')

也许可以优化你的代码?如果你有问题x,不要问y。。你能展示一些可能是罪魁祸首的代码吗。这是一个最简单的API示例,实例内存有时会超过限制。它不使用任何数据存储或任何东西,但从您所说的来看,这并不是您的全部代码。每个处理程序都将由任何实例运行,因此总内存将由整个代码贡献。在开发服务器上使用apptrace来分析内存使用情况。我不相信泄漏是那么普遍,我有运行了几天的实例,最大值在70MB以下,而且我从来没有出现内存错误,我的代码要比你实现CMS所做的任何事情(即运行完整的金字塔堆栈、deform、zpt模板)复杂得多。它是一个相对低容量的站点。目前其中一个实例有622个请求,运行了4小时18分钟,消耗了72.3MB MB。我一定会尝试apptrace。不,我不相信上面的例子是真正的罪魁祸首,但是我可以很容易地在错误日志中找到很多实例在这次调用中失败的情况。这里只是猜测,但可能是在其他API调用中建立的内存,在这些调用中,我使用ndb和memcache,并返回一些大媒体文件以响应某些请求。谷歌发布的“最佳记忆实践”备忘单会有所帮助,但我还没有发现任何与之相关的内容。