App Engine推迟:追踪内存泄漏

时间:2016-02-03 23:01:06

标签: python google-app-engine memory-leaks google-cloud-storage

我们有一个App Engine应用程序,可以将大量相对较大的文件写入Google Cloud Store。这些文件是动态创建的CSV,因此我们使用Python的StringIO.StringIO作为缓冲区,csv.writer作为写入该缓冲区的接口。

一般来说,我们的流程如下:

# imports as needed
# (gcs is the Google Cloud Store client)

buffer = StringIO.StringIO()
writer = csv.writer(buffer)

# ...
# write some rows
# ...

data = file_buffer.getdata()
filename = 'someFilename.csv'

try:
    with gcs.open(filename, content_type='text/csv', mode='w') as file_stream:
        file_stream.write(data)
        file_stream.close()

except Exception, e:
    # handle exception
finally:
    file_buffer.close()

据我们了解,csv.writer不需要自行关闭。相反,只需要关闭上面的bufferfile_stream

我们在deferred中运行上述过程,由App Engine的任务队列调用。最终,我们在几次调用任务后得到以下错误:

  

在为11个请求提供服务后,超过128 MB的软私有内存限制(142 MB)

显然,我们的应用程序中存在内存泄漏。但是,如果上面的代码是正确的(我们承认可能不是这种情况),那么我们唯一的另一个想法是通过服务我们的请求来保存大量内存(如错误消息所示)。

因此,我们想知道在执行deferred期间App Engine是否保留了某些实体。我们还应该注意,尽管存在这些错误消息,但我们的CSV最终已成功写入。

1 个答案:

答案 0 :(得分:2)

描述的症状不是必然指示应用程序内存泄漏。可能的替代解释包括:

相关Q& As: