【发布时间】:2021-12-07 17:38:57
【问题描述】:
我看到类似于this post 的内容。看起来需要额外的细节来回答这个问题,所以我重新询问我的细节,因为这些细节没有提供。
我正在运行 Google Cloud Run image processing tutorial example 的修改版本。
我正在使用this create tasks snippet 将任务插入任务队列。队列中的任务被推送到我的云运行实例。
问题是它没有及时扩大规模并完成我的任务。
我的云运行服务配置:
- 我已尝试设置至少 0 和 50 个实例
- 我尝试了最多 100 和 1000 个实例
- 我试过
--concurrency=1和2,还有8 - 我尝试过使用
--async和不使用--async
即使使用concurrency set to 1,也预分配了50 instances,我通常会看到~10 active container instances 和~40 idle container instances。我在队列中有~30,000 tasks,它正在通过~5 jobs/minute。
我的任务队列具有默认设置。我的容器没有使用很多 cpu,但它们使用了很多内存。
一个过程大约需要一分钟才能完成。我只为每个容器实例运行一个进程。应该设置哪些额外的参数来获得更高的吞吐量?
编辑 - 添加额外的日志
我为队列启用了日志,但我发现某些作业出现了一些错误。错误如下所示:
{
insertId: "<my_id>"
jsonPayload: {
@type: "type.googleapis.com/google.cloud.tasks.logging.v1.TaskActivityLog"
attemptResponseLog: {
attemptDuration: "19.453155s"
dispatchCount: "1"
maxAttempts: 0
responseCount: "0"
retryTime: "2021-10-20T22:45:51.559121Z"
scheduleTime: "2021-10-20T16:42:20.848145Z"
status: "UNAVAILABLE"
targetAddress: "POST <my_url>"
targetType: "HTTP"
}
task: "<my_task>"
}
logName: "<my_log_name>"
receiveTimestamp: "2021-10-20T22:45:52.418715942Z"
resource: {
labels: {
location: "us-central1"
project_id: "<my_project>"
queue_id: "<my-queue>"
target_type: "HTTP"
}
type: "cloud_tasks_queue"
}
severity: "ERROR"
timestamp: "2021-10-20T22:45:51.459232147Z"
}
我在云运行日志中看不到错误。
编辑 - 附加调试信息
我试图将队列排除在外,以确定它是云运行还是队列。相反,我直接使用curl 发布到网址。一些任务成功运行,其他任务我收到错误。在下面的日志中空行是成功的:
upstream connect error or disconnect/reset before headers. reset reason: connection termination
upstream connect error or disconnect/reset before headers. reset reason: connection termination
upstream connect error or disconnect/reset before headers. reset reason: connection termination
upstream connect error or disconnect/reset before headers. reset reason: connection termination
upstream connect error or disconnect/reset before headers. reset reason: connection termination
这让我觉得 cloud run 没有处理所有传入的请求。
编辑 - 任务完成时间测试
我想测试完成任务所花费的时间是否会导致 CloudRun 以及队列扩展和跟上任务的任何问题。
代替我真正想要完成的任务,我放置了一个仅休眠 n 秒的虚拟任务,并将任务详细信息打印到标准输出(我可以在云运行日志中读取)。
将 n 设置为 0, 5, 10 seconds 我看到实例的数量增加了,它跟上了添加到队列中的任务。将 n 设置为 20 seconds 或更多时,我看到实例化的 CloudRun 实例更少,并且项目在任务队列中累积。我在日志中看到更多与 Unavailable 状态有关的错误。
根据this post:
Cloud Run offers a longer request timeout duration of up to 60 minutes
因此,似乎需要长时间运行的任务。这是谷歌的错误还是我错过了设置一些参数?
【问题讨论】:
标签: google-cloud-platform google-cloud-run google-cloud-tasks