猿问

Cloud-Run 进程失败,并显示 500 状态代码和 membarrier gvisor 错误

背景

该服务是一个简单的 Go 程序,它将文件从 Cloud Storage 传输到浏览器。

在我的 Macbook 上一切正常,但在 Cloud-Run(托管)上无法满足某些请求。大多是大型 mp4 文件。

问题

日志仅显示500状态,浏览器也是如此。但我的服务除了开始复制文件之外不记录任何内容。没有 IO 错误或任何错误。

此消息在状态之前 4 秒显示500

Container Sandbox Limitation: Unsupported syscall membarrier(0x10,0x0,0x0,0x8,0x775dce0b030,0x775dce0b000). Please, refer to https://gvisor.dev/c/linux/amd64/membarrier for more information.

我无法在本地重现此内容。使用相同的配置和 GCP 存储桶在本地运行良好。

该服务在 Cloud-Run 上运行良好,处理较小的文件(例如图像)。只是不是我尝试过的视频。

我试过了

  • 将所有内容记录到io.Copy. 没有错误,调用后挂起io.Copy

  • 增加容器的内存。现在已经运行1G了。与 512M 没有变化。

  • 使用相同的配置、相同的凭据在本地 Docker 容器中运行。没问题。

  • 在 Twitter 上联系 GCP

更新2019-08-16

我创建了一个非常简单的服务,将“A”打印到 http 响应编写器。它在本地也能完美运行,但在云运行时返回 500 且尺寸较大。1MB OK、5MB OK、50 MB 失败、100MB 失败等。此服务运行时没有 membarrier 消息。

代码可在此处获取:https ://github.com/andrioid/reproduct-cloud-run-bug

也在问题跟踪器上报告:https ://issuetracker.google.com/issues/139511257

更新 2:可能的原因

响应大小似乎有 32MB 的硬性限制。

https://cloud.google.com/run/quotas

非常令人失望的是,这个值无法增加,并且错误没有提到这个限制,日志文件也没有提到。


慕森卡
浏览 123回答 0
0回答
随时随地看视频慕课网APP

相关分类

Go
我要回答