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
Google app engine 在为总共3个请求提供服务后,超过了512MB的软内存限制(532MB)。考虑在App.YAML中设置更大的实例类_Google App Engine_Google App Engine Python_Google Tasks Api_Google Tasks - Fatal编程技术网

Google app engine 在为总共3个请求提供服务后,超过了512MB的软内存限制(532MB)。考虑在App.YAML中设置更大的实例类

Google app engine 在为总共3个请求提供服务后,超过了512MB的软内存限制(532MB)。考虑在App.YAML中设置更大的实例类,google-app-engine,google-app-engine-python,google-tasks-api,google-tasks,Google App Engine,Google App Engine Python,Google Tasks Api,Google Tasks,我们使用的是谷歌应用引擎标准环境F2实例(第1代-python 2.7)。我们有一个遵循此流程的报告模块 工作任务在队列中启动 task = taskqueue.add( url='/backendreport', target='worker', queue_name = 'generate-reports', params={ "task_data"

我们使用的是谷歌应用引擎标准环境F2实例(第1代-python 2.7)。我们有一个遵循此流程的报告模块

工作任务在队列中启动

    task = taskqueue.add(
            url='/backendreport',
            target='worker',
            queue_name = 'generate-reports',
            params={
                "task_data"     : task_data
            }) 
在worker类中,我们查询Google数据存储并将数据写入Google工作表。我们对记录进行分页以查找其他报表元素。当我们找到额外的页面时,我们再次调用相同的任务来生成另一个write,这样它就可以获取下一组报表元素并将它们写入GoogleSheet

在backendreport.py中,我们有以下代码

 class BackendReport(): 
        # Query google datastore to find the records(paginated)  
        result = self.service.spreadsheets().values().update(
                spreadsheetId=spreadsheet_Id, 
                range=range_name,
                valueInputOption=value_input_option, 
                body=resource_body).execute()

        # If pagination finds additional records
        task = taskqueue.add(
                url='/backendreport',
                target='worker',
                queue_name = 'generate-reports',
                params={
                    "task_data"     : task_data
                })
我们作为前端作业(而不是任务)运行相同的后端报告(带分页)。分页工作没有任何错误-这意味着我们获取每页记录并显示到前端。但是,当我们迭代执行任务时,它会因软内存限制问题而失败。我们的印象是,每次调用一个任务(对于每个分页),它都应该独立地执行,并且不应该有任何内存限制。我们做错了什么

当达到软内存限制时,GCP为什么不自动旋转一个不同的实例(我们的实例类是F2)。 错误消息说,在为总共3个请求提供服务后,达到了512 MB的软内存限制-这是否意味着backendreport模块启动了3个请求-是否意味着有3个任务调用(/backendreport)

当达到软内存限制时,GCP为什么不旋转另一个实例

appengine决定启动新实例时的主要机制之一是
max\u concurrent\u requests
。您可以签出您可以在此处配置的所有
自动缩放
参数:

这是否意味着backendreport模块启动了3个请求?是否意味着有3个任务调用(/backendreport)


我想是的。可以肯定的是,您可以打开Logs viewer,找到打印日志的日志,并按实例id筛选日志,以查看它处理的所有指向该点的请求。

您正在云任务中创建多个任务,但其中的调度队列没有限制,当队列试图同时分派多个任务时,它将达到内存限制。因此,您想要设置的限制实际上是
max_concurrent_requests
,但是对于
app.yaml
中的实例,应该为
queue.yaml
中的队列调度设置限制,因此一次只调度一个任务:

- name: generate-reports
  rate: 1/s
  max_concurrent_requests: 1

谢谢你,亚历克斯。文档中没有提到要根据软内存限制进行缩放的参数。您建议我们如何解决上述问题?我不相信AppEngine提供了这样的功能。听起来您需要将
max\u concurrent\u requests
设置为
1
,但仅3个请求就需要512MB。你觉得这样对吗?您可以对流程进行一些改进,比如一次处理一个文件的块。我同意512MB用于3个请求是很多的。因此,我对如何解决这个问题感到困惑。每个任务只处理10个数据字段。这些字段中没有关联的大字符串。我反复调用任务的方式是否错误?我不认为问题在于任务的开销。我有一个cron的工作,它可以扇出许多谷歌云任务,而且我没有碰到内存问题。我认为问题在于任务中发生了什么。另一个需要考虑的是,有些Python LIBs在加载和使用时需要吸收一个淫秽的内存量。